2012-01-07 6 views
0

Sencha Touchは国際化を行う公式な方法がないため、私自身の小さなユーティリティセットを作成しています。私は既存のi18nプラグインを使用するためにjQueryのような別のlibを埋め込むことはしません。現時点では、私は困っている最善の方法を考え出しています。 現在、私はクラスをシングルトンとして実装しています。コンストラクタでは、言語を決定し、対応する言語ファイルをロードします。 現時点で私はSenchaメソッドを使用しており、モデルを定義し、データ(json)をストアにロードしています。私はそれが便利だと思う。ここで私は、データをロードし、コンストラクタからの抜粋:Sencha Touch 2 MVC - アプリケーションの初期化前のAjaxリクエスト

 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 
    }); 

ここでの問題負荷が非同期アプリケーションが前にロードし始める可能性があることを意味(?!煎茶との同期呼び出しを行う手立てが)ではないということですこのことは終わった。私はビューがそれに頼っているので、データが必要です。私がこれまでに見つけた

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に組み込み、ユーティリティクラスがそのオブジェクトにアクセスできることを確認します。

答えて

0

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

0

これが助けることができる、この記事を参照してください:sencha touch i18n basics

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

独自の文字列(ネイティブタッチコンポーネントについては言及していません)では、このようなことを行うことができます。ヘッド部のあなたのindex.htmlで

1)、リソースをロードするブラウザの言語に応じて、あなたのlocaleManagerで

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

前LocaleManager.jsファイル(任意の名前)をロードあなたの言語に対応するファイル(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)、例えばsearchfieldプレースホルダー値について

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

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

もう1つの解決策は、あなたのアプリを構築する際に、あなたのアプリのローカライズ版を作成することです。したがって、言語ごとに1つのバージョンが存在します。次に、ブラウザーの言語に応じて、ブラウザーでアプリをロードするときに正しいバージョンのアプリをロードします。

関連する問題