我正在使用l20n的bower版本来本地化一个ember-cli应用程序。
我使用以下流程本地化应用程序:
我已经创建了一个初始化程序,它根据用户的语言设置创建了一个l20n上下文对象。
使用ember帮助器,我将每个单词从DOM传递到要翻译的l20n上下文对象。
在车把模板中:
{{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');
没有工作,因为帮助者无法使用容器!
答案 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);