0

Sencha Touch には国際化を行う公式の方法がないため、私は独自のユーティリティ メソッドの小さなセットを作成しています。jQuery のような別のライブラリを埋め込んで、既存の i18n プラグインを使用するつもりはありません。現時点では、最善の方法を見つけるのに苦労しています。現在、シングルトンとして実装されたクラスがあります。コンストラクターで言語を決定し、対応する言語ファイルを読み込みます。現時点では、Sencha メソッドを使用してモデルを定義し、データ (json) をストアにロードしています。ある意味便利だと​​思います。データをロードするコンストラクターのスニペットを次に示します。

        Ext.define('Translation', {
        extend: 'Ext.data.Model',
        idProperty: 'key',
        fields: [
            {name: 'key', type: 'string'},
            {name: 'translation', type: 'string'}
        ],
        proxy: {
            type: 'ajax',
            url: 'res/translation-'+lang+'.json', 
            //appendId: false,
            reader: {
                type: 'json',
            }
        }
    });

    _store = Ext.create('Ext.data.Store', {
        model   : 'Translation',
        autoLoad: true
    });

ここでの問題は、ロードが非同期であることです (sencha で同期呼び出しを行う方法はありません?!)。これは、この処理が完了する前にアプリケーションがロードを開始する可能性があることを意味します。ビューはデータに依存しているため、データが必要です。

Ext.Loader.setConfig({enabled:true});
Ext.application({
name: 'MyApp',
controllers: ['Ctr1', 'Ctr2'],
models: ['Model1', 'Model2],
init: function() {

},
launch: function() {

}
});

これまでに見つけた唯一の解決策は

  1. コールバックを使用して、アプリの初期化を内部にラップします。
  2. Sencha を使用せず、手動で ajax リクエストを行います。
  3. Ajax をまったく使用しないでください。すべての言語の翻訳を javascript ファイルに入れ、それを index.html に含め、ユーティリティ クラスがオブジェクトにアクセスできることを確認します。
4

3 に答える 3

1

すでに i18N 拡張機能があり、こちらをご覧ください。

https://github.com/elmasse/Ext.i18n.Bundle-touch

于 2012-02-13T15:34:07.273 に答える
0

Sencha Touch でこれを行う簡単な方法はありません。あなたの最善の策は、翻訳を含むjsonファイルの同期Ajaxリクエストを作成し、その後アプリケーションを起動させることです.

于 2012-02-12T23:52:40.960 に答える
0

これが役立つかもしれないこの投稿を参照してください: sencha touch i18n basics

そして私の答えは、多分それはあなたを助けることができます.

独自の文字列 (ネイティブのタッチ コンポーネントについては話していません) については、次のようなことができます。

1) head セクションの index.html で、LocaleManager.js ファイル (名前は何でも) を読み込みます。

<script id="microloader" type="text/javascript" src="sdk/microloader/development.js"></script>

localeManager で、ブラウザーの言語に応じて、言語に対応するリソース ファイル ( myStrings-fr.js | myStrings-en.js ) を読み込みます。

ブラウザで言語を取得するには、次のようにします。

window.navigator.language || window.navigator.userLanguage || window.navigator.browserLanguage || window.navigator.systemLanguage

2) 翻訳された文字列でリソース ファイルを作成します。

英語版 (myStrings-en.js) の場合は次のようになります。

var myStrings = {
MyPackage1: {
    myString1: 'Seach...'
}};

たとえば、フランス語版 (myStrings-fr.js) の場合は次のようになります。

var myStrings = {
MyPackage1: {
    myString1: 'Recherchez...'
}};

3) sencha touch コードで、たとえば検索フィールドのプレースホルダー値

xtype: 'searchfield',
id: 'searchToolbarItem',
placeHolder: myStrings.MyPackage1.myString1

それが役立つことを願っています。

別の解決策は、sencha touch アプリのビルド プロセスを変更し、ビルド時にアプリのローカライズ バージョンを作成することです。したがって、言語ごとに 1 つのバージョンがあります。次に、ブラウザー言語に応じて、アプリをブラウザーにロードするときに、アプリの適切なバージョンをロードします。

于 2012-08-01T12:07:24.340 に答える