2

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

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

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

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

在车把模板中:

{{l20n-helper 'stringVariable'}}

在 ember 助手中:

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

这行得通,但我刚刚在 Ember 上标记了一个全局变量,以使帮助程序可以访问 l20n 上下文。我知道这不是最佳做法。我试图弄清楚如何创建一个仅用于存储 l20n 上下文对象的 ES6 模块。这样,在我的 ember 助手中,我可以这样做:

import l20n from "/????"

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

提前感谢您的帮助!!!

更新:

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

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

但是,那么我的问题将是从我的助手访问容器。这个:

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

将不起作用,因为容器对助手不可用!

4

1 回答 1

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);
于 2015-02-19T18:29:35.407 回答