因为 Sencha Touch 缺乏官方的国际化方法,所以我正在编写自己的一小部分实用方法。我不会嵌入另一个像 jQuery 这样的库来使用已经存在的 i18n 插件。目前我很难找出最好的方法。目前我有一个作为单例实现的类。在构造函数中,我确定语言并加载相应的语言文件。目前我正在使用 Sencha 方法并定义模型并将数据(json)加载到商店中。我觉得有点方便 这是我加载数据的构造函数的片段:
Ext.define('Translation', {
extend: 'Ext.data.Model',
idProperty: 'key',
fields: [
{name: 'key', type: 'string'},
{name: 'translation', type: 'string'}
],
proxy: {
type: 'ajax',
url: 'res/translation-'+lang+'.json',
//appendId: false,
reader: {
type: 'json',
}
}
});
_store = Ext.create('Ext.data.Store', {
model : 'Translation',
autoLoad: true
});
这里的问题是加载是异步的(无法使用 sencha 进行同步调用?!),这意味着应用程序可能会在这些内容完成之前开始加载。我需要数据,因为视图依赖于它。
Ext.Loader.setConfig({enabled:true});
Ext.application({
name: 'MyApp',
controllers: ['Ctr1', 'Ctr2'],
models: ['Model1', 'Model2],
init: function() {
},
launch: function() {
}
});
到目前为止我发现的唯一解决方案是
- 使用回调并将应用程序初始化包装在里面。
- 不要使用 Sencha 并手动执行 ajax 请求。
- 根本不要使用 Ajax。将所有语言的翻译放入一个 javascript 文件中,将其包含在 index.html 中,并确保实用程序类可以访问该对象。