2012-06-02 31 views
13

Me pregunto cuál sería la mejor manera de implementar múltiples versiones/idiomas del mismo contenido en el mismo diseño en Express.Aplicación expreso en varios idiomas

¿Debo hacer esto?

app.get("/", function(req, res) { 
    res.render(language + "/index"); 
}); 

¿O hay una forma más inteligente/mejor?

Respuesta

21

Sugeriría mantener solo una plantilla, ya que si usa una plantilla por idioma se saldrá de control muy rápidamente, y mucho menos duplicará mucho contenido (y la pequeña cantidad de "lógica" que pondría en una plantilla también). Muchas aplicaciones usan una herramienta llamada gettext para hacer lo de la internacionalización. Hay una biblioteca node.js para él en https://github.com/DanielBaulig/node-gettext

Alternativamente también existe i18n-node. Parece tener un poco más de integración con js expreso.

+3

Gracias! Tomaré i18n-node. :) – buschtoens

2

pensé que podemos definir objetos json en la carpeta lang como, en.js, fr.js y este archivo json contiene pares de valores clave que renderizar a la plantilla de acuerdo con la configuración de idioma del usuario, los ajustes de idioma pueden estar en la base de datos.

Y podemos guardar este fr.js o cualquier otra cosa en res.locals para llamar a cada plantilla.

¿Es esto adecuado?

5

El i18n-node es el módulo más simple y mejor que debe usar. Puede usar directamente en código JavaScript o con plantillas de Jade/Handlebar con js expreso.

¿Por qué debería usar i18n?

  • Detección automática de la configuración regional del navegador por encabezado, cookie o parámetro de consulta según su configuración.
  • Viene con ejemplos también.
  • Genera automáticamente en.json por defecto dentro de ./locales/. Esto actúa como un archivo maestro para que comiences a construir nuevas traducciones.
  • Soporta formas singular y plural
  • Soporte de parámetros: __('Hello %s', 'Marcus') vuelve Hallo Marcus
Cuestiones relacionadas