Pregunta

Vamos a desarrollar un sitio web ASP.NET en 30 idiomas. ¿Cuál es la mejor solución para desarrollar ese sitio? ¿Qué arquitectura se utilizará?

¿Fue útil?

Solución

Sugiero almacenar las propiedades de la interfaz de usuario en archivos de recursos ( .resx ) y tener la CurrentUICulture en el idioma específico para cada solicitud:

<globalization culture="auto" uiCulture="auto" />

Si su sitio web está orientado principalmente al contenido en lugar de una aplicación orientada a los negocios que difiere mucho en función del idioma, es posible que desee considerar la creación de un conjunto separado de páginas para cada idioma y redirigir al usuario en función de una propiedad de cookie o perfil o Request.UserLanguages ??. No es posible dar una receta general para el problema de la globalización. La mejor arquitectura difiere significativamente según la naturaleza de cada proyecto individual.

Otros consejos

NLS es un requisito recurrente y, a menudo, cuando se hace la pregunta sobre la funcionalidad de NLS, las personas que preguntan no son conscientes de la complejidad. NLS generalmente se divide en (al menos) 2 áreas:

  • NLS en la interfaz de usuario

  • NLS en los datos

En su caso, un sitio web basado en contenido, incluso puede dividir el segundo punto en - datos generados por el proveedor del sitio web y - datos generados por el usuario.

Para UI NLS puede usar el mecanismo .resx como lo menciona Mehrdad, pero debe tener en cuenta que cada trabajo de localización siempre requiere editar el código fuente (es decir, los archivos resx).

Cuando tuve que desarrollar una aplicación web de múltiples idiomas, decidí manejar el requisito de NLS en mi código, y creé un par de tablas específicas de NLS que reflejaban la interfaz de usuario (por cierto, esta fue la motivación para escribir graspx : extraiga todos los textos visibles de la fuente aspx, como Label.Text, etc.). Hay una aplicación separada para cargar la definición de UI y dejar que los traductores hagan su trabajo. La aplicación principal tiene una funcionalidad de importación para los textos traducidos.

El modelo de datos tiene este aspecto: Page - PageItems - PageItemTexts (con referencia a un idioma), por lo que es bastante simple.

Se puede aplicar el mismo modelo al contenido: en lugar de Page y PageItems, simplemente tiene ContentItems, que contienen solo un PK y un identificador, y una tabla que contiene el texto de los ContentItems asociados con un idioma.

Además, puede definir algún tipo de cadena de reserva de idioma, de modo que un texto que aún no está traducido se muestre en el idioma original o en algún otro idioma (estrechamente relacionado).

El idioma que se muestra se puede seleccionar mediante el idioma proporcionado por el navegador (HTTP_ACCEPT_LANGUAGE), pero el usuario debe poder sobrescribirlo (p. ej., mediante un cuadro combinado). El idioma seleccionado debe almacenarse en una variable de sesión, en una cookie o en la base de datos (para usuarios registrados).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top