虽然觉得是自己经验不足导致的这个模块使用起来有点折腾,不过,还是记录下..
以 express.js 应用为例,在 package.json 中添加 dependencies:
"i18n": "*"
app.js 中:
var express = require('express'),
i18n = require('i18n');
i18n.configure({
locales:['en-US', 'zh-CN', 'zh-TW'], // setup some locales - other locales default to en_US silently
defaultLocale: 'zh-CN',
directory: './i18n', // i18n 翻译文件目录,我的是 i18n, 可以写成其他的。
updateFiles: false,
indent: "\t",
extension: '.js' // 由于 JSON 不允许注释,所以用 js 会方便一点,也可以写成其他的,不过文件格式是 JSON
});
app.configure(function() {
[...]
// default: using 'accept-language' header to guess language settings
app.use(i18n.init);
[...]
});
路由控制:
app.get('/', function(req, res){
var greeting = res.__('Hello');
});
EJS 模板:
<%= __('Hello') %>
在 i18n.configure 部分的 locales 里是可用语言列表,i18n 会在对应的 directory 下寻找以该语言命名的 json 文件(如果 extension 设置为其他的那么就会寻找对应后缀名的文件)。
例如 defaultLocale 设置为 zh-CN,i18n目录下的 zh-CN.js 文件内容为:
{
"Hello": "Hello, world!"
}
那么上文中的 res.__('Hello') 和 <%= __('Hello') %> 将返回 Hello, world!。
简单吧?更详细的文档在 npmjs 上可以找到。
另外还有一个模块是 Mozilla 的,叫做 i18n-abide。一开始我也试了这个不过估计我能力还不够... gettext() 总是报错未定义 QAQ