Extjs 多语言的JSON文件

Extjs 多语言的JSON文件,extjs,sencha-touch-2,sencha-architect,Extjs,Sencha Touch 2,Sencha Architect,想法: 为我的应用程序提供每种语言的JSON文件。根据用户设置加载正确的设置 它将如何工作?我的应用程序是在启动时加载每个JSON文件,还是按要求按“字符串”加载以显示?它会不会变得太重?它会不会比每种语言都有一个模型,每个可显示字符串都有字段慢 我计划在我的应用程序中使用3个语言 谢谢如果您使用JSON文件作为语言,则必须通过Ajax加载它,并将数据分配给变量(比如“Lang”)以访问属性。现在,如果在视图或控制器配置中使用Lang值,这将是一个问题,因为这些文件可能会在Ajax调用仍在进行时

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

它将如何工作?我的应用程序是在启动时加载每个JSON文件,还是按要求按“字符串”加载以显示?它会不会变得太重?它会不会比每种语言都有一个模型,每个可显示字符串都有字段慢

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


谢谢

如果您使用JSON文件作为语言,则必须通过Ajax加载它,并将数据分配给变量(比如“Lang”)以访问属性。现在,如果在视图或控制器配置中使用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对象就足够了。

您是否有我可以阅读的示例lang.js文件来理解其结构?它需要什么?还是你的一个小而完整的例子?我会试着理解你的动态加载函数,不一定能跟上吗?发生了什么事?(我没有做太多的JS,我只在一个页面上做简单的事情)。检查此链接:。我已经包含了我的一个项目中的En.js文件的内容。动态加载文件是用户选择一个选项后加载相关语言文件(比如En.js或Fr.js)。你只需要传递文件的url,这个函数就可以在DOM的头部创建并添加一个脚本链接。非常有用,谢谢!