私は最近、同じ問題で苦労しました。これを行うにはきれいな方法を見つける
はかなりの挑戦だった - ほとんどの選択肢は...
1のいずれかであった)ロケールごとにあなたのコードベース(WTH)
2重複)あなたのそれぞれをオーバーライドローカライズされたファイルをダウンロード(メンテナンス地獄?貧しい翻訳者についてはどうですか?)
3)翻訳を含む静的ファイルを使用/生成してください(すべての言語がダウンロードされますか?それを生成するための追加のビルドステップ? ?
)私はすべての世界の最高取得しようとする責任ユーティリティクラスになってしまった:
1)基本的にExtJSのベースコンポーネントに上書きを適用ExtJSの翻訳ファイル()
2のロード)ロケール固有のプロパティーresourcebundle(ロードするロケールを指定する)をサーバーからロードする。
3)Prototyping文字列の値に基づいて読み込まれたストア(サーバーからメッセージバンドルを含む)を照会して翻訳を返すtranslate()メソッドを使用したストリング。
これは物事の要旨である:
バンドル&プロトタイピング:ビューから一例として
localeStore.load({
callback : function(records, operation, success) {
// Define translation function (NB! Must be defined before any components which want to use it.)
function translate() {
var record = localeStore.getById(this.valueOf()) ;
if(record === null) {
alert('Missing translation for: ' + this.valueOf()); // Key is not found in the corresponding messages_<locale>.properties file.
return this.valueOf(); // Return key name as placeholder
} else {
var value = record.get('value');
}
return value;
}
String.prototype.translate = translate;
callback.call(); // call back to caller(app.js/Ext.Application), loading rest of application
}
});
:
this.copyButton = Ext.create('Ext.button.Button', {
disabled: true,
text: 'DOCUMENT_LIBRARY_MENU_COPYTO_BUTTON'.translate(),
action: 'openCopyDialog'
});
バンドルサーバ上(mesages_en.properties ): DOCUMENT_LIBRARY_MENU_COPYTO_BUTTON =ファイルをコピー e TC ..
長所:
- 無大騒ぎコード「Your_key'.translate()は、それが読みやすく、これはローカライズされた文字列
- なし/ほとんどメンテナンスのオーバーヘッド(保っていることを認識します各ロケールの上書きファイル?イエス..)
- 必要なロケールだけをロードします。シャバン全体ではありません。
- 本当にしたいのであれば、同じバンドル内のExtJSロケールファイル用に独自の翻訳を行うこともできます。
- あなたはすべてのバンドルは、このように、後
短所孤立翻訳を避け、同じキーが含まれていることを保証するために、ユニットテストを書くことができます:
- 同期 - ストアは、あなたのメインのアプリが起動する前にロードする必要があります。私はすべてのテキストがロードされた後に呼び出されたユーティリティクラスからのコールバックを追加することでこれを解決しました。
- テキストのないリアルタイムの人口..私は私のユーザーを作りたくなかったもののどちらかのサーバーが過負荷に:P
をこれまでのところ、私のアプローチは、私の要件についてはかなりうまくいっています。 サイトの読み込みが著しく遅くなく、バンドル(バンドルあたり〜200個のキー/値を含む)が読み込み中に〜10kbで測定されます。
プロトタイプのThanx JaySeeは、コードを読んでも簡単な翻訳方法を提供することを喜ばしくしています。 – Paul
エレガントなソリューションをありがとう。 [Ext.ux.Cache](https://market.sencha.com/extensions/ext-ux-cache)を使用する場合、短所は長所に変更することができます – Pencroff