IDEA:
为我的应用程序提供每种语言的 JSON 文件。根据用户设置的设置加载正确的。
它将如何运作?我的应用程序会在启动时加载每个 JSON 文件,还是会按照显示请求按“字符串”加载“字符串”?它会不会比为每种语言都有一个模型为每个可显示的字符串都有字段要慢?
我计划在我的应用程序中有 3 个语言。
谢谢你
IDEA:
为我的应用程序提供每种语言的 JSON 文件。根据用户设置的设置加载正确的。
它将如何运作?我的应用程序会在启动时加载每个 JSON 文件,还是会按照显示请求按“字符串”加载“字符串”?它会不会比为每种语言都有一个模型为每个可显示的字符串都有字段要慢?
我计划在我的应用程序中有 3 个语言。
谢谢你
如果您将 JSON 文件用于语言,则必须通过 Ajax 加载它并将数据分配给变量(例如“Lang”)以访问属性。现在,如果您在 Views 或 Controllers 配置中使用 Lang 值,这将是一个问题,因为这些文件可能会在 Ajax 调用仍在进行中时被加载。比如下面的案例:
Ext.define('SomeView', {
config : {
....
html : Lang.someview.displatHtml, // This will give "Lang is undefined" error
....
}
});
因此,我最好建议您为它们使用单独的 JS 文件。我主要使用 app 目录中的 lang 文件夹,其中包括所有 En.js、Fr.js 等。语言对象看起来很简单,如下所示:
var LANG = {
loading : 'Loading...'
}
您可以使用如下所示的简单函数动态加载此语言文件(在应用程序加载app.js
文件之前)。如果您不需要动态更改它,只需在 index.html 顶部添加一个脚本。
// Load JS file dynamically
function loadJS(url){
if(!url){ return; }
var head= document.getElementsByTagName('head')[0],
script= document.createElement('script');
script.type= 'text/javascript';
script.src= url;
head.appendChild(script);
}
没有必要为此使用 Sencha 模型。如果您使用模型,则每次添加新语言属性时都必须添加一个字段。像上面这样一个简单的 json 对象就足够了。