web-dev-qa-db-ja.com

多言語エクスプレスアプリ

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

これをやればいいの?

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

または、よりスマートな/より良い方法はありますか?

21
buschtoens

テンプレートを1つだけ保持することをお勧めします。言語ごとに1つのテンプレートを使用する場合は、すぐに手に負えなくなってしまうだけでなく、多くのコンテンツ(およびテンプレートに挿入する少量の「ロジック」)も複製されます。多くのアプリケーションは、国際化を行うためにgettextと呼ばれるツールを使用しています。 https://github.com/DanielBaulig/node-gettext にnode.jsライブラリがあります

あるいは i18n-node もあります。 Express jsと少し統合されているようです。

27
ziad-saab

i18n-node は、使用する必要がある最も単純で最大のモジュールです。 JavaScriptコードで直接使用するか、または高速jsを使用したJade/Handlebarテンプレートで使用できます。

なぜi18nを使うべきですか?

  • 設定に応じて、ヘッダー、Cookie、またはクエリパラメータによるブラウザからのロケールの自動検出。
  • サンプルも付属しています。
  • デフォルトでは_en.json_内に_./locales/_が自動的に生成されます。これは、新しい翻訳の作成を開始するためのマスターファイルとして機能します。
  • 単数形と複数形をサポート
  • パラメータのサポート:__('Hello %s', 'Marcus')は_Hallo Marcus_を返します
9
ankitjaininfo

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

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

これは適切ですか?

4
Osman Erdi