我正在玩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 });
};
现在,我很确定那里有什么问题。因为我认为要求应该只进行一次,而且我要求每次请求。但是,由于我需要访问请求标头中的语言,所以我想不出任何其他方式。
有什么想法吗?
提前致谢。
答案 0 :(得分:1)
对于国际化,我强烈推荐i18n。
答案 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 });
};