nodejs i18n国际化(通过浏览器切换语言)

说明
  • 该内容作为自己学习过程中和项目中的一次使用记录,方便以后查看。
  • 如果内容有错误(那就是项目中使用错误啦)的地方,欢迎指正。
开发环境
前端: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();
};

你可能感兴趣的:(nodejs i18n国际化(通过浏览器切换语言))