2017-02-16 59 views
0

环回框架使用strong-globalize模块为API响应提供翻译。我查了一下,发现框架中有一些默认翻译。Strongloop环回 - 错误消息的本地化

我们希望使用'Accept-Language'标题字段来确定应该使用哪种翻译。强烈的全球化自述中也提到了这一点。

但它不工作翻译总是英语。

我们必须做些什么才能使它工作?

回答

0

您需要创建一个中间件并在那里设置当前的语言。

//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')}); 
+0

对我来说,它似乎不工作。消息仍然是英文的:'CustomUser'实例无效。详情:'email'不能为空(值:undefined); 'username'用户已经存在(值:\“bob \”)。'。但它在强大的全球化中设定了正确的语言。也许它不是一个单身人士,设置会丢失,并创建一个具有默认设置的新实例? –

+0

@ blacksheep_2011它是单例,除非你通过在其他地方调用'var g = SG('some-name')'创建一个实例 –

+0

好吧知道。我会用调试器来调查它,看看这里发生了什么 –