2012-06-02 13 views
13

Mi chiedo quale sarebbe il modo migliore per implementare più versioni/lingue dello stesso contenuto nello stesso layout espresso.Multilanguage express app

Devo farlo?

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

O c'è un modo più intelligente/migliore?

risposta

21

Vorrei suggerire di mantenere solo un modello, come se si usasse un modello per linguaggio che diventasse fuori mano molto rapidamente, figuriamoci duplicare molto contenuto (e la piccola quantità di "logica" che si inserirà in un modello pure). Molte applicazioni usano uno strumento chiamato gettext per fare la cosa dell'internazionalizzazione. C'è una libreria node.js per esso a https://github.com/DanielBaulig/node-gettext

In alternativa c'è anche i18n-node. Sembra avere un po 'più di integrazione con express js.

+3

Grazie! Prenderò il nodo i18n. :) – buschtoens

2

ho pensato che possiamo definire oggetti json nella cartella lang come, en.js, fr.js e questo file json contiene coppie di valori chiave rispetto al rendering per modello in base all'impostazione della lingua dell'utente, le impostazioni lang possono essere nel database.

E possiamo salvare questo fr.js o qualsiasi altra cosa in res.locals per chiamare ogni modello.

È adatto?

5

Il i18n-node è il modulo più semplice e più grande da utilizzare. Puoi usare direttamente nel codice Javascript o con i modelli Jade/Handlebar con express js.

Perché dovresti usare i18n?

  • Rilevamento automatico delle impostazioni internazionali dal browser per intestazione, cookie o parametro di query a seconda dell'impostazione.
  • Viene fornito anche con esempi.
  • Genera automaticamente uno en.json per impostazione predefinita all'interno di ./locales/. Questo funge da file principale per iniziare a creare nuove traduzioni.
  • Supporta forme singolari e plurali
  • Supporto per i parametri: __('Hello %s', 'Marcus') rendimenti Hallo Marcus