2010-04-11 6 views
6

Estoy pensando en el desarrollo de la siguiente, pero se pregunta si ya existe ahí fuera:Uso de SQL para la localización en lugar de archivos RESX en ASP.NET

necesito una solución basada en SQL para asignar y gestionar los valores de texto para la localización un sitio asp.net en lugar de usar archivos RESX. Esto ayuda a mantener el texto en el sitio sin tener que quitarlo para su implementación cada vez que se requiere una actualización.

Gracias.

+0

Lo escuché sobre el reinicio del sitio cuando inserta una nueva resx –

+0

Me pregunto qué concluyó en ese entonces porque estoy en una situación similar hoy. – Helbo

Respuesta

3

De hecho, recorrimos ese camino, y terminamos con un sitio web realmente muy lento: arrancar el mecanismo de traducción basado en SQL y utilizar los recursos de ASP.NET nos dio un importante aumento del rendimiento. Así que realmente no puedo recomendar que hagas lo mismo ... (y sí, estuvimos almacenando en caché y optimizando el rendimiento y todo) y las cosas basadas en SQL todavía eran significativamente más lentas).

Obtienes lo que pagas: el enfoque basado en SQL era más flexible en términos de ser capaz de "traducir" sobre la marcha y corregir errores tipográficos y demás. Pero al final, en nuestra aplicación (Webforms, .NET 2.0 en ese momento), el uso de recursos resultó ser la única forma viable de hacerlo.

+0

En una aplicación que he creado, consideramos ir por este camino de mover los recursos a una base de datos. Siempre me pregunté sobre el rendimiento (sabía que habría uno) de hacer esto. – Thomas

+1

Estoy totalmente en desacuerdo. Los datos de traducción son totalmente fáciles de almacenar en caché y con una solución bien ejecutada, ¡el rendimiento no debería ser un problema! – Robert

+0

@Robert: eres libre de estar en desacuerdo: solo puedo hablar sobre el hecho de nuestra experiencia que tuvimos. Y también hicimos un almacenamiento en caché bastante agresivo: nunca obtuvimos el rendimiento ni remotamente comparable con RESX. Esa es nuestra historia –

1

Hicimos esto (traducción basada en SQL) y estamos muy contentos con el resultado. Desarrollamos una interfaz para agencias de traducción para realizar las actualizaciones de la página en línea. Como efecto secundario, la solución comenzó a servir como sistema de gestión de contenido. Si almacena sus datos en caché, el rendimiento no es un problema. La desventaja es que invertimos cientos de horas en nuestra solución. (Supongo que alrededor de 600 horas, pero podría verificar).

+0

@Robert, así es como lo imaginé. Mi sitio es realmente grande y es cada vez más difícil hacer las actualizaciones más pequeñas como texto, estilos simples, mostrar/ocultar elementos, administrar los menús del sitio ... etc. Tengo que enfrentar a mi equipo de a uno por vez mediante la creación de pequeños sistemas de administración basados ​​en SQL que finalmente se sumará a un CMS en todo el sitio. Mis dos principales preocupaciones partida por ese camino son: 1- carga de base de datos 2- gestión de texto y configuración entre el entorno de desarrollo local y el medio ambiente amor ¿Me puede decir más sobre su proyecto, el alcance, la carga, el tamaño. ..etc? gracias. – Laith

+0

Tenemos en picos 20 000 visitantes por día y en picos 200 usuarios activos concurrentes. Almacenamos en caché todas las traducciones en ASP.NET Cache. SQL-Load no es un problema de esa manera. Cuando alguien edita las traducciones, la memoria caché se invalida y se vuelve a llenar desde la base de datos. (No estoy seguro si realizo alguna segmentación aquí). Almacenamos traducciones en 3 tablas. "Translaiton", "TranslationGroup", "TranslaionValue". Actualmente tenemos 48738 TranslationValues ​​(25 o más idiomas) para 2427 elementos para traducir en 230 grupos (una sola página es un grupo o marcadores de posición por tema están conectados de esa manera). – Robert

+0

Consideramos que nuestra solución fue de código abierto, pero no encontramos el tiempo para hacerlo. – Robert

0

Terminamos con una solución híbrida en la que los usuarios podían editar el contenido en una base de datos, pero la aplicación creó un .resx que se implementó manualmente.

También podría omitir la traducción del servidor y hacer la traducción en jQuery en el cliente, que es un enfoque que he utilizado con éxito.

0

No estoy seguro acerca del reinicio del sitio web, pero al menos usar .NET MVC es muy conveniente y no he notado ese problema de reinicio, y si ocurre, ¿con qué frecuencia necesita actualizar los archivos de resx? Para proyectos más grandes que utilizo para crear una solución con varios proyectos, uno para la localización, algo como esto:

  • MyApp.Localization
    • Modelo
    • Página
    • File1.resx
  • MyApp.Core
  • MyApp.Web

Luego, en el proyecto Web que añadir una referencia a la localización del proyecto, y lo utilizan como

@ MyApp.Localization.Model.Customer.CustomerName

@ MyApp.Localization.Page.About.PageTitle

@ MyApp.Localization.File1.Paragraph1

Cada vez que cambie el texto traducido, ya sea que cargar una dLL actualizada o copiar los archivos .resx.

NOTA: Debe establecer sus archivos de Resx en PUBLIC, de modo que se pueda acceder a ellos como fuertemente tipados.

0

Creé un esquema de traducción basado en SQL. Pero solo cargo las traducciones necesarias para una página determinada cuando se solicita, y solo las que corresponden a esa página en particular.

Se cargan en un objeto de diccionario cuando la página se recarga y almacena en caché durante la sesión. Entonces, simplemente se reemplaza el texto basado en una búsqueda sobre eso.

Casi todo se genera dinámicamente e incluye contenido definido por el usuario que debe traducirse, por lo que la flexibilidad es la clave.

El rendimiento es bastante rápido, las consultas SQL para recuperar todos los datos toman mucho más tiempo (en términos relativos).

Cuestiones relacionadas