【问题标题】:Strongloop Loopback - Localization of error messagesStrongloop Loopback - 错误消息的本地化
【发布时间】:2017-02-16 07:05:10
【问题描述】:

loopback 框架使用 strong-globalize 模块为 api 响应提供翻译。我查了一下,发现框架中有一些默认的翻译。

我们想使用“Accept-Language”标头字段来确定应该使用哪种翻译。强全球化自述文件中也提到了这一点。

但它不起作用,翻译总是英文。

我们必须做些什么才能让它发挥作用?

【问题讨论】:

    标签: loopbackjs strongloop


    【解决方案1】:

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

    //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\")。`。但它在强全球化中设置了正确的语言。也许它不是单例并且设置丢失并创建了具有默认设置的新实例?
    • @blacksheep_2011 除非您通过在其他地方调用 var g = SG('some-name') 创建实例,否则它是单例的
    • 好的,很高兴知道。我将使用调试器对其进行研究,看看这里发生了什么
    • @blacksheep_2011 你想翻译验证错误信息吗?如果你这样做了,就没有办法翻译它们。您应该在客户端翻译它们或在调用验证方法时设置正确的消息
    • 我试过了,但它现在只显示翻译键。这似乎有点hacky。我们现在将编写我们自己的 Angular 2 服务来翻译消息并在不同的客户端之间共享它。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多