我一直在尝试为我的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'。我认为这仅适用于浏览器。
答案 0 :(得分:0)
挂钩到initComponent()方法 - 您可以使用以下内容:
//...
initComponent : function() {
Ext.apply(this, {
title: 'i18n.getTranslation('hello', appLocale)'
});
this.callParent();
},
//...
这样,任何本地化文本都在对象初始化期间设置,而不是在定义类中。