多语言的JSON文件

时间:2013-05-29 19:16:17

标签: extjs sencha-touch-2 sencha-architect

IDEA:
为我的应用程序提供每种语言的JSON文件。根据用户设置的设置加载正确的一个。

它会如何运作?我的应用程序会在启动时加载每个JSON文件,还是按照要求显示的“字符串”加载“字符串”?它是否会变得过于沉重,是否会让每种语言的模型都具有每个可显示字符串的字段?

我计划在我的应用程序中使用3个语言。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您正在使用语言的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对象就足够了。