说明
- 该内容作为自己学习过程中和项目中的一次使用记录,方便以后查看。
- 如果内容有错误(那就是项目中使用错误啦)的地方,欢迎指正。
开发环境
前端:nodejs + express + Handlebars
后段:随便
使用环境说明
- 因为项目中需要在浏览器web端做国际化,通过切换按钮来达到切换语言。所以在nodejs端采用了i18n作为语言环境。
代码流程说明
- 1、初始化i8n配置
- 2、nodejs在login页面通过切换语言的路由将语言保存在session或者cookie中
3、app.js中通过拦截来进行切换i18n的语言环境
/**
1、i18n配置,app.js片段
2、自己是结合了cookie来做的语言环境保存
3、app.js其他部分,自行添加
*/
var i18n = require('i18n');
//配置i18n
i18n.configure({
locales: config.get('langs'), //声明包含的语言
directory: __dirname + '/i18n', //翻译json文件的路径
defaultLocale: i18n.getLocale(), //默认的语言,优先级4
cookie: 'lang',
queryParameter: 'lang',
register: global,
//autoReload: true //语言包改变时,自动加载
});
hbs.registerHelper('__', function () {
return i18n.__.apply(this, arguments);
});
hbs.registerHelper('__n', function () {
return i18n.__n.apply(this, arguments);
});
//没有数据提示文字国际化
hbs.registerHelper('nodatamess', function (str) {
if (str) {
return i18n.__(str);
} else {
return i18n.__('暂无数据');
}
});
app.use(cookieParser());
app.use(session({
secret:'ricky',
cookie:{maxAge:3600000 * 24 * 30},
resave:false,
saveUninitialized:false
}));
// 添加setLocale中间件,注意必须在session之后
app.use(setLocale);
//国际化初始化
app.use(i18n.init);
// 定义setLocale中间件
function setLocale(req, res, next){
var locals = config.get('defaultLang');
if(req.cookies.lang != null && req.cookies.lang != "" && req.cookies.lang != undefined){
locals = req.cookies.lang;
}
app.locals.defaultLang = locals;
i18n.setLocale(locals);
next();
};