Strongloop环回 - 错误消息的本地化
问题描述:
环回框架使用strong-globalize模块为API响应提供翻译。我查了一下,发现框架中有一些默认翻译。Strongloop环回 - 错误消息的本地化
我们希望使用'Accept-Language'标题字段来确定应该使用哪种翻译。强烈的全球化自述中也提到了这一点。
但它不工作翻译总是英语。
我们必须做些什么才能使它工作?
答
您需要创建一个中间件并在那里设置当前的语言。
//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": {}
},
UPDATE
如果你想翻译的内置的验证错误消息,你应该在客户端翻译或验证设置翻译的消息。
//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')});
对我来说,它似乎不工作。消息仍然是英文的:'CustomUser'实例无效。详情:'email'不能为空(值:undefined); 'username'用户已经存在(值:\“bob \”)。'。但它在强大的全球化中设定了正确的语言。也许它不是一个单身人士,设置会丢失,并创建一个具有默认设置的新实例? –
@ blacksheep_2011它是单例,除非你通过在其他地方调用'var g = SG('some-name')'创建一个实例 –
好吧知道。我会用调试器来调查它,看看这里发生了什么 –