javascript - i18n nodejs 和前端 javascript 本地化
问题描述
我正在使用 express js 4.0 并使用 ejs 视图配置https://github.com/mashpie/i18n-node i18n 模块。
我也想支持 .js 文件。如何__()
在 .js 文件中显示 i18n 函数?
解决方案
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);
推荐阅读
- mysql - 调用未定义的方法 Doctrine\ORM\QueryBuilder::limit()
- dart - Flutter / dart如何从静态图像中读取二维码
- dart - 打开定位服务而不导航到设置页面?飞镖
- php - 如何在 youtube api 上设置 enableAutoStart
- c++ - 需要帮助按“输入或换行”以允许用户返回主菜单
- rust - 为什么 AsRef 不能用作参数类型注释但可以用于泛型声明?
- javascript - Bootstrap 4 popper 未定义
- react-native - 使用 createBottomTabNavigator 将道具从一个屏幕传递到另一个屏幕
- java - Spring DevTools 不包含在使用 spring-boot-maven-plugin 打包的 fat jar 中
- ios - 我们可以扫描 Wi-Fi SSID 以获取他们在 iOS 中的接收信号强度 (RSS) 吗?