2

ember-cli アプリをローカライズするために、l20n の bower バージョンを使用しています。

次のフローを使用してアプリをローカライズしています。

  1. ユーザーの言語設定に基づいて l20n コンテキスト オブジェクトを作成するイニシャライザを作成しました。

  2. ember ヘルパーを使用して、各単語を DOM から l20n コンテキスト オブジェクトに渡して翻訳します。

ハンドルバー テンプレート内:

{{l20n-helper 'stringVariable'}}

残り火ヘルパーで:

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

これは機能しますが、ヘルパーが l20n コンテキストにアクセスできるようにするために、グローバル変数を Ember にタグ付けしただけです。私はそれがベストプラクティスではないことを知っています。l20n コンテキスト オブジェクトを格納するためだけに機能する ES6 モジュールを作成する方法を見つけようとしています。そうすれば、ember ヘルパー内で次のことができます。

import l20n from "/????"

l20n オブジェクトがアプリの残りの部分を動かなくなるのを防ぎます。

助けてくれてありがとう!!!

アップデート:

1 つの解決策は、次のように 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 に答える