哪里可以在ember-cli app中存储l20n ctx对象

时间:2015-02-19 04:45:07

标签: ember.js ember-cli l20n

我正在使用l20n的bower版本来本地化一个ember-cli应用程序。

我使用以下流程本地化应用程序:

  1. 我已经创建了一个初始化程序,它根据用户的语言设置创建了一个l20n上下文对象。

  2. 使用ember帮助器,我将每个单词从DOM传递到要翻译的l20n上下文对象。

  3. 在车把模板中:

    {{l20n-helper 'stringVariable'}}
    

    在英国助手中:

    export function translate(word){
      return Ember.l20n.getSync(word);
    }
    export default Ember.Handlebars.makeBoundHelper(translate);
    

    这很有效,但我只是在Ember上标记了一个全局变量,以便让帮助者可以访问l20n上下文。我知道这不是最好的做法。我试图弄清楚如何创建一个仅用于存储l20n上下文对象的ES6模块。那样,在我的余烬助手里面,我可以做到:

    import l20n from "/????"
    

    并防止l20n对象阻塞应用程序的其余部分。

    提前感谢您的帮助!!!

    更新

    一种解决方案是使用application.register,如下所示:

     application.register('l20n:main', ctx, {instantiate: false});
    

    但是,我的问题是从我的助手访问容器。这样:

    var l20n = this.container.lookup('l20n:main');
    

    没有工作,因为帮助者无法使用容器!

1 个答案:

答案 0 :(得分:1)

所以,事实证明我的助手已经可以访问容器了! 这就是我必须做的才能让它发挥作用:

import Ember from 'ember';

export function translate(word) {
  var ctx = this.container.lookup('l20n:main');
  return ctx.getSync(word);
}

export default Ember.Handlebars.makeBoundHelper(translate);