在请求中要求文件

时间:2012-09-14 14:05:09

标签: node.js require multilingual

我正在玩Node.js,我想知道我所做的事情是否可以被视为最佳实践,我仍然需要学习很多东西。

我正在尝试通过创建更多JSON文件来实现多语言布局,然后根据http标头(语言)加载这些文件。我在做的是:

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 });
};

现在,我很确定那里有什么问题。因为我认为要求应该只进行一次,而且我要求每次请求。但是,由于我需要访问请求标头中的语言,所以我想不出任何其他方式。

有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

对于国际化,我强烈推荐i18n。

i18n-node

答案 1 :(得分:1)

您需要两个不同的文件。所以我不确定你为什么认为自己在重复自己。

最终,您应该将语言文件转换为位于本地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 });    
};