25

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

私はこれをするべきですか?

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

それとも、よりスマートでより良い方法がありますか?

4

3 に答える 3

32

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

または、 i18nノードもあります。Expressjsとの統合が少し進んでいるようです。

于 2012-06-02T23:50:02.950 に答える
13

i18nノードは、使用する必要のある最も単純で最大のモジュールです。Javascriptコードで直接使用することも、Expressjsを使用するJade/Handlebarテンプレートで使用することもできます。

なぜi18nを使用する必要があるのですか?

  • 設定に応じて、ヘッダー、Cookie、またはクエリパラメータによるブラウザからのロケールの自動検出。
  • 例も付いています。
  • en.jsonデフォルトで内部にを自動的に生成します./locales/。これは、新しい翻訳の作成を開始するためのマスターファイルとして機能します。
  • 単数形と複数形をサポート
  • パラメータのサポート:__('Hello %s', 'Marcus')戻り値Hallo Marcus
于 2016-08-17T19:09:15.777 に答える
6

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

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

これは適切ですか?

于 2015-08-11T17:51:21.363 に答える