0

Sencha の公式の例を見てトークンを取得したので、翻訳をアプリケーションに適用したいと思います。この例では、2 つの files.js と file.html が同じディレクトリにありますが、アプリケーションは MVC アーキテクチャに従っているため、異なります。翻訳する単語を含む js ファイルがあります。

if (Ext.app.ContactForm) {
Ext.apply(Ext.app.ContactForm.prototype, {
    formTitle: 'Contact Informatie (Dutch)',
    firstName: 'Nom',
    lastName: 'Prénom'
});
}

また、私のアプリケーションには file.html 'app.html' が 1 つしか含まれていないため、file.js を app.html の同じディレクトリまたはビュー フォルダーのどこに配置すればよいかわかりません。そして、それがどのようにすべてのアプリケーションで読めるようになるか。

4

1 に答える 1

1

1 つの方法は、すべてのオーバーライドを含む 1 つのファイルを index.html に含めることです! 公式のロケール ファイル (ext/locale) を使用する場合と同様です。

    <script type="text/javascript" src="ext-4/locale/ext-lang-de.js"> </script> 

これは、アプリケーションをビルドしない限り機能します。

いつの日かアプリケーションを構築したいので、別の方法をお勧めします!

問題: (sencha ツール -> app-all.js を使用して) アプリケーションをビルドしている場合、最初にアプリケーションをロードしたときにローカリゼーションが機能しないことがわかりました。その理由は、要素のレンダリング プロセスの後にオーバーライドが適用されるためです。

たとえばmyOverrides.jsという名前のファイルを作成します

Ext.define('MyApp.myOverrides', {    

statics: {
    doOverride: function() {

        Ext.apply(Ext.app.ContactForm.prototype, {
            formTitle: 'Contact Informatie (Dutch)',
            firstName: 'Nom',
            lastName: 'Prénom' 
        });
}
});

初期化の前に適用するために、app.js に次の変更を加え、index.html から削除しました。

  1. autoCreateViewportのターン 理由: レンダリング プロセスが開始する前に、アプリの起動関数が呼び出されるようになりました。
  2. app.js の launch 関数で次のことを行います

    launch: function() {
        ...
        //Injecting the overrides
        Ext.Loader.injectScriptElement('app/myOverride.js', Ext.emptyFn);        
        MyApp.myOverride.doOverride();
        Ext.create( "MyApp.view.Viewport");  //We have to create the viewport manually
    }
    

前に言ったように、これは開発モードと本番モード (app-all.js) でうまくいきました。

于 2013-01-07T12:04:10.960 に答える