i18n nodejs和前端javascript本地化

时间:2018-07-18 17:11:14

标签: javascript node.js express internationalization

我使用的是Express js 4.0,并且已将https://github.com/mashpie/i18n-node i18n模块配置为ejs视图。

我想也支持.js文件。如何使i18n函数__()在.js文件中可见?

1 个答案:

答案 0 :(得分:0)

var i18n = require("i18n");
var express = require('express')
//I18n Module
i18n.configure({
    locales: ['en'],
    defaultLocale: 'en',
    register: global,
    syncFiles: true,
    directory: __dirname + '/../locales'
});
i18n.setLocale('en');


var router = express.Router()
router.get('/i18n/:key', function (req, res, next) {
    var result = "Not Found";
    var key = req.params.key;
    if(key != null){
        result = i18n.__(key);
    }

    res.send(result);

})

router.get('/i18n.json', function (req, res, next) {
    res.send(i18n.getCatalog(i18n.getLocale()));
});

router.get("/i18n.js", function(req, res, next){
    var locals = i18n.getCatalog(i18n.getLocale());
    res.send("var __ = function(key) { var locals = "+JSON.stringify(locals)+"; return locals[key] != null ? locals[key] : key }");
})





module.exports = {
    config: function(req, res, next) {

        i18n.init(req, res);

        console.log("langueage inited")
        return next();
    },
    frontend: router
}

我做了一个简单的工具,将语言环境作为__()公开给前端。但是有现成的解决方案吗?

要使用此功能,只需添加app.js

var i18nConfig = require('./app/i18n')
app.use(i18nConfig.config);
app.use(i18nConfig.frontend);