2011-10-27 15 views
0

私はローカリゼーションのガイドに従っています:http://docs.sencha.com/ext-js/4-0/#!/guide/localizationしかし、私はMVCのパターンで動作させることはできません。 前の例のような動的なローカリゼーションは必要ありません。アプリケーションが読み込まれるときに設定する必要があります。ExtJS 4.0:ローカライゼーションの問題

私はこのように試してみました:放火犯で

Ext.application({ 
name: 'KS', 

appFolder: 'app', 

controllers: ['Menu', 'DailyReport', 'DP'], 

launch: function() { 
    Ext.Ajax.request({ 
     url: 'lib/ext-4.0/locale/ext-lang-es.js', 
     success: function(response, opts) { 
      eval(response.responseText); 
     }, 
     failure: function() { 
      Ext.Msg.alert('Error', 'Error al cargar archivos de idioma.'); 
     } 
    }); 
    Ext.create('Ext.container.Viewport', { 
     items: [{ 
      xtype: 'menu' 
     }, 
     { 
      xtype: 'dpedit' 
     }] 
    }); 

} 
}); 

を私が手:エラー "Ext.viewが未定義である"、と何もレンダリングしません。 Viewportを作成した後にAjaxコールを試行してもエラーは発生しませんが、翻訳は適用されません。

答えて

0

アプリケーションモードが起動する前に、すべてのext javascriptファイルがロードされると、運用モードで動作します。私もこの問題を抱えていました。これを試してみてください: 'ext-all.js'ファイルをインポートし、その後、言語ファイルをインポートしてください。これは動作します。最高の解決策ではなく、私が見つけた唯一の解決策です。

問題の原因:あなたの翻訳ファイルを開く場合は、このようなディレクティブに気づくでしょう

Ext.view.View.prototype.emptyText = ""; 

ファイル「Ext.view.View.js」はロードされていない場合翻訳ファイルを読み込むと、 'Ext.view.View'クラスが存在しないため、エラーが発生します。

誰かがより良い解決策を手伝ってくれることを願っています。

+0

動作しますが、あなたはそれが最もエレガントなソリューションではありません言ったように。 – Milan

1

より洗練されたソリューションは、起動メソッドを実行する前にオートローダーにクラスをロードさせることです。 あなたはこれを行うことができ、必要に応じExt.view.Viewを定義します。詳細については

Ext.application({ 
    name: 'KS', 

    appFolder: 'app', 

    controllers: ['Menu', 'DailyReport', 'DP'], 

    // This will make shure the class is loaded before your application runs: 
    requires : ['Ext.view.View'], 

    launch: function() { 
     Ext.Ajax.request({ 
      url: 'lib/ext-4.0/locale/ext-lang-es.js', 
      success: function(response, opts) { 
       eval(response.responseText); 
      }, 
      failure: function() { 
       Ext.Msg.alert('Error', 'Error al cargar archivos de idioma.'); 
      } 
     }); 
     Ext.create('Ext.container.Viewport', { 
      items: [{ 
       xtype: 'menu' 
      }, 
      { 
       xtype: 'dpedit' 
      }] 
     }); 
    } 
}); 

を、私は非常に簡単にこれを解決しExtJSのapi

+0

これは、ローカライゼーションがグリッド、フォームフィールド、ピッカーなど他のすべてのコンポーネントを1つずつ要求すると機能しません。 – Milan

0

を参照してください。それは簡単で、もっとうまくいくでしょう。 ext.js/ext-all.jsの後、app.jsの前に、ドキュメントの頭に入れてください。私はレール3.1で動作するように/資産を使用してい

var params = Ext.urlDecode(window.location.search.substring(1)); 
if (params.lang) { 
    var url = Ext.util.Format.format('/assets/extjs/locale/ext-lang-{0}.js', params.lang); 
    document.write("<script src='" + url + "'><\/script>"); 
} 

(私は、ローカライズガイドあたりlanguage.jsの一番下にそれを置きます)。

これにより、クエリパラメータで?lang = frが容易になり、残りの部分はガイドに従って動作するはずです。

http://docs.sencha.com/ext-js/4-0/#!/guide/localization