0

我看了一下Sencha 的官方示例,现在我想将翻译应用到我的应用程序中。在示例中我遵循了两个 files.js 和 file.html 在同一目录中,但我的应用程序遵循 MVC 架构,因此有所不同。我有一个 js 文件,其中包含要翻译的单词:

if (Ext.app.ContactForm) {
Ext.apply(Ext.app.ContactForm.prototype, {
    formTitle: 'Contact Informatie (Dutch)',
    firstName: 'Nom',
    lastName: 'Prénom'
});
}

而且我的应用程序只包含一个file.html 'app.html',所以我不知道将file.js 放在哪里,在app.html 的同一目录或视图文件夹中!以及它如何在所有应用程序中都可以阅读。

4

1 回答 1

1

一种方法是,在 index.html 中包含一个包含所有覆盖的文件!就像您使用官方语言环境文件(ext/locale)一样。

    <script type="text/javascript" src="ext-4/locale/ext-lang-de.js"> </script> 

只要您不构建应用程序,它就可以工作。

总有一天你想构建你的应用程序,所以我建议一种不同的方式!

问题:我发现,如果我正在构建我的应用程序(使用 sencha 工具 -> app-all.js),当我第一次加载应用程序时本地化不起作用。原因是,覆盖是在元素的渲染过程之后应用的。

创建一个名为myOverrides.js的文件

Ext.define('MyApp.myOverrides', {    

statics: {
    doOverride: function() {

        Ext.apply(Ext.app.ContactForm.prototype, {
            formTitle: 'Contact Informatie (Dutch)',
            firstName: 'Nom',
            lastName: 'Prénom' 
        });
}
});

为了在初始化之前应用它,我对 app.js 进行了以下更改并将其从 index.html 中删除。

  1. 开启autoCreateViewport 原因:现在会在渲染进程开始前调用app的launch函数!
  2. 在 app.js 的启动功能中执行以下操作

    launch: function() {
        ...
        //Injecting the overrides
        Ext.Loader.injectScriptElement('app/myOverride.js', Ext.emptyFn);        
        MyApp.myOverride.doOverride();
        Ext.create( "MyApp.view.Viewport");  //We have to create the viewport manually
    }
    

正如我之前所说,这在开发和生产模式中对我有用(使用 app-all.js)。

于 2013-01-07T12:04:10.960 回答