1

私は Node.js をいじっていますが、私がやっていることはベスト プラクティスと見なすことができるかどうか疑問に思っていましたが、まだ学ぶべきことがたくさんあります。

httpヘッダー(言語)に応じてロードされるJSONファイルをさらに作成することにより、多言語レイアウトを実装しようとしています。私がやっていることはこれです:

exports.index = function(req, res){
try {
    var words = require('../languages/' + req.headers["accept-language"].substr(0, 2).toLowerCase());
} catch(err) {
    console.log("no language found - falling back to english");
    var words = require('../languages/en');
}

res.render('index', { language: words });
};

今、私はそこに何か問題があると確信しています。要求は一度だけ行うべきだと思うので、要求ごとに要求しています。しかし、リクエストヘッダーで言語にアクセスする必要があるため、他の方法は考えられません。

何か案は?

前もって感謝します。

4

2 に答える 2

1

国際化のために、私はi18nを強くお勧めします。

i18nノード

于 2012-09-14T14:08:17.650 に答える
1

2 つの異なるファイルが必要です。ですから、なぜあなたが自分自身を繰り返していると思うのかわかりません。

最終的には、言語ファイルを、ローカルの node_modules フォルダーまたはアプリが使用する同じ node_modules フォルダーにある実際のモジュールに変換する必要があります。

このようにして、このような言語モジュールを要求できます。

var language = require('language');

言語モジュール内には、インデックス ファイルと lib ディレクトリが必要です。

index.js

exports.en= require('./lib/en'),
exports.fr= require('./lib/fr'),
exports.de= require('./lib/de'),

次に、このようにモジュールを使用できるようになります。

exports.index = function(req, res){

  language = require('language');

try {

    var words = language[req.headers["accept-language"].substr(0, 2).toLowerCase()]();
} catch(err) {
    console.log("no language found - falling back to english");
    var words = language.en();
}

res.render('index', { language: words });
};

上記をこれに置き換えます。

exports.index = function(req, res){

    var language = require('language');
        supported_languages = ['en', 'fr' , 'de'],
        accept_language = req.headers["accept-language"].substr(0, 2).toLowerCase();

    if(supported_languages.indexOf(accept_language) !== -1){

        var words = language[accept_language]();

    }else {
        console.log("no language found - falling back to english");
        var words = language.en();
    }

    res.render('index', { language: words });    
};
于 2012-09-14T15:30:32.847 に答える