同じコンテンツの複数のバージョン/言語を同じレイアウトでエクスプレスで実装するための最良の方法は何でしょうか。
私はこれをするべきですか?
app.get("/", function(req, res) {
res.render(language + "/index");
});
それとも、よりスマートでより良い方法がありますか?
言語ごとに1つのテンプレートを使用する場合、多くのコンテンツ(およびテンプレートに配置する少量の「ロジック」)を複製することは言うまでもなく、すぐに手に負えなくなるため、テンプレートを1つだけ保持することをお勧めします。多くのアプリケーションは、gettextと呼ばれるツールを使用して国際化を行います。https://github.com/DanielBaulig/node-gettextにそのためのnode.jsライブラリがあります
または、 i18nノードもあります。Expressjsとの統合が少し進んでいるようです。
i18nノードは、使用する必要のある最も単純で最大のモジュールです。Javascriptコードで直接使用することも、Expressjsを使用するJade/Handlebarテンプレートで使用することもできます。
なぜi18nを使用する必要があるのですか?
en.json
デフォルトで内部にを自動的に生成します./locales/
。これは、新しい翻訳の作成を開始するためのマスターファイルとして機能します。__('Hello %s', 'Marcus')
戻り値Hallo Marcus
、en.js、fr.jsなどのlangフォルダーでjsonオブジェクトを定義できると思いました。このjsonファイルには、ユーザーの言語設定に従ってテンプレートにレンダリングするよりもキーと値のペアが含まれています。lang設定はデータベースに含めることができます。
そして、すべてのテンプレートを呼び出すために、このfr.jsまたはその他のものをres.localsに保存できます。
これは適切ですか?