2012-06-02 25 views
13

エクスプレスで同じレイアウトの同じコンテンツの複数のバージョン/言語を実装する最良の方法は何でしょうか。多言語エクスプレスアプリ

これを行うだけですか?

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

もっとスマートな方がいいですか?

答えて

21

言語ごとに1つのテンプレートを使用すると非常に迅速に手に入りますが、多くのコンテンツ(テンプレートに入れる少量の "ロジック"あまりにも)。多くのアプリケーションでは、国際化のためにgettextというツールを使用しています。それにはnode.jsライブラリがありますhttps://github.com/DanielBaulig/node-gettext

また、i18n-nodeもあります。 express jともう少し統合されているようです。

+3

感謝を!私はi18nノードをとる。 :) – buschtoens

2

私は、en.js、fr.jsのようなlangフォルダにjsonオブジェクトを定義できると思っていました。このjsonファイルには、ユーザーの言語設定に従ってテンプレートにレンダリングするキー値のペアが含まれています。

そして、すべてのテンプレートを呼び出すために、res.localsにこのfr.jsなどを保存できます。

これは適していますか?

5

i18n-nodeは、使用する必要がある最も簡単で優れたモジュールです。 Javascriptコードで直接使用することも、Jade/HandlebarテンプレートでExpress jを使用することもできます。

なぜi18nを使用する必要がありますか?あなたのセットアップに応じて、ヘッダー、クッキーやクエリパラメータでブラウザからロケールの

  • 自動検出。
  • 例も付属しています。
  • の内部には、デフォルトでen.jsonが自動的に生成されます。これは、新しい翻訳の作成を開始するためのマスターファイルとして機能します。
  • 単数形と複数形
  • にパラメータのサポートサポート:__('Hello %s', 'Marcus')戻りHallo Marcus