2011-10-27 118 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

這不起作用,因爲本地化會逐一請求所有其他組件:網格,表單域,選取器等。 – Milan

0

我解決了這個非常容易。這很簡單,它會工作得更好。把它放在你的文檔頭部,在ext.js/ext-all.js之後,在你的app.js之前。 (根據本地化指南,我把它放在language.js的底部)

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

我正在使用/ assets來使用rails 3.1。

這有利於查詢參數中的?lang = fr,應用程序的其餘部分應根據指南工作。

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