Sencha touch和Cordova检测现场

时间:2013-09-23 13:05:24

标签: cordova sencha-touch

我一直在尝试为我的sencha touch 2.2.x应用实现集成。 我的问题并不完全是包含所有键/值对的js或json文件的创建。我的问题是实际检测到语言环境并采取相应的行动。

我正在使用Cordova提供的navigator.globalization.getLocaleName(),我在app.js的启动功能中初始化了一个全局变量'appLocale'。但是,在定义类似我下面的Main.js的类时,值{title:''}是在我从Cordova API获取语言环境之前设置的。

我是否有其他方式可以获取区域设置或可能是其他地方放置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'));    
    }
});

P.S。即使我更改了区域设置,window.navigator.language也会在Android模拟器中返回'en'。我认为这仅适用于浏览器。

1 个答案:

答案 0 :(得分:0)

挂钩到initComponent()方法 - 您可以使用以下内容:

//...

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

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

这样,任何本地化文本都在对象初始化期间设置,而不是在定义类中。