【发布时间】:2017-02-16 07:05:10
【问题描述】:
loopback 框架使用 strong-globalize 模块为 api 响应提供翻译。我查了一下,发现框架中有一些默认的翻译。
我们想使用“Accept-Language”标头字段来确定应该使用哪种翻译。强全球化自述文件中也提到了这一点。
但它不起作用,翻译总是英文。
我们必须做些什么才能让它发挥作用?
【问题讨论】:
标签: loopbackjs strongloop
loopback 框架使用 strong-globalize 模块为 api 响应提供翻译。我查了一下,发现框架中有一些默认的翻译。
我们想使用“Accept-Language”标头字段来确定应该使用哪种翻译。强全球化自述文件中也提到了这一点。
但它不起作用,翻译总是英文。
我们必须做些什么才能让它发挥作用?
【问题讨论】:
标签: loopbackjs strongloop
您需要创建一个中间件并在那里设置当前语言。
//server/middlewares/lang.js
var negotiator = require('negotiator');
var SG = require('strong-globalize');
module.exports = function(options) {
var allowedLangs = ['en', 'fa'];
return function localeHandler(req, res, next) {
var lang = new negotiator(req).language(allowedLangs);
var g = SG();
g.setLanguage(lang);
next();
};
};
和
//server/middleware.json
"inital:after": {
"./middlewares/lang": {}
},
更新
如果你想翻译内置的验证错误信息,你应该在客户端翻译或设置翻译的信息用于验证。
//custom-user.js
CustomUser.validations.email = lodash.reject(CustomUser.validations.email, function(val) {
return val.validation === 'presence';
});
CustomUser.validatesPresenceOf('email', {message: g.t('email-can-not-be-blank')});
【讨论】:
The CustomUser` 实例无效。详情:email不能为空(值:未定义); username 用户已经存在(值:\"bob\")。`。但它在强全球化中设置了正确的语言。也许它不是单例并且设置丢失并创建了具有默认设置的新实例?
var g = SG('some-name') 创建实例,否则它是单例的