2013-09-23 54 views
0

我一直在尝试实现我的sencha touch 2.2.x应用程序的集成。 我的问题不是完全创建包含所有键/值对的js或json文件。我的问题是实际检测到的语言环境并采取相应措施。Sencha触摸和科尔多瓦检测区域

我使用由科尔多瓦提供navigator.globalization.getLocaleName(),我有一个全局变量“AppLocale会”在app.js.的发射功能初始化但是,在定义像下面的Main.js这样的类时,在从Cordova API获取语言环境之前,{title:'}的值已设置。

是否有另一种方法可以让我获得语言环境或其他地方可以使用getLocaleName()方法?

这里是我的Main.js文件

Ext.define('MyApp.view.Main', { 
    extend: 'Ext.tab.Panel', 
    xtype: 'main', 

    config: { 
      tabBarPosition: 'bottom', 
      items: { 
       title: 'Get Started', 
       iconCls: 'action', 

       items: [ 
        { 
         docked: 'top', 
         xtype: 'titlebar', 
         title: 'i18n.getTranslation('hello', appLocale)' 
        }] 
      } 
    } 
}); 

这是我的app.js文件:

Ext.application({ 
    name: 'MyApp', 

    requires: [ 
     'MyApp.util.i18n' 
    ], 

    views: [ 
     'Main' 
    ], 

    launch: function() { 

     navigator.globalization.getLocaleName(
      function (locale) {appLocale = locale.value}, 
      function() {alert('Error getting locale\n');} 
     );    

     Ext.Viewport.add(Ext.create('MyApp.view.Main'));  
    } 
}); 

附: window.navigator.language总是在Android模拟器中返回'en',即使我更改语言环境。我认为这只是一个浏览器。

回答

0

勾入initComponent()方法 - 在这里你可以使用类似:

//... 

initComponent : function() { 
    Ext.apply(this, { 
     title: 'i18n.getTranslation('hello', appLocale)' 
    }); 

    this.callParent(); 
}, 
//... 

这样一来,任何本地化的文本对象初始化,不是阶级定义期间设置。

+0

你是说我不能有类定义的区域? –

+0

如果语言环境在您定义*类之前加载,则可以。在初始化时更安全。 – arthurakay

+0

对于它的价值,为什么不把Ext.Viewport.add()行放在getLocaleName()方法的回调中......这种方式直到加载语言环境才会发生。 – arthurakay