ExtJS 4.0: проблемы с локализацией - PullRequest
0 голосов
/ 27 октября 2011

Я внимательно следил за руководством по локализации: http://docs.sencha.com/ext-js/4-0/#!/guide/localization,, однако я не могу заставить его работать в шаблоне MVC. Мне не нужна динамическая локализация, как в предыдущем примере, я просто хочу установить ее при загрузке приложения.

Я пытался так:

Ext.application({
name: 'KS',

appFolder: 'app',

controllers: ['Menu', 'DailyReport', 'DP'],

launch: function() {
    Ext.Ajax.request({
        url: 'lib/ext-4.0/locale/ext-lang-es.js',
        success: function(response, opts) {
            eval(response.responseText);
        },
        failure: function() {
            Ext.Msg.alert('Error', 'Error al cargar archivos de idioma.');
        }
    });
    Ext.create('Ext.container.Viewport', {
        items: [{
            xtype: 'menu'
        },
        {
            xtype: 'dpedit'
        }]
    });

}
});

В firebug я получаю сообщение об ошибке "Ext.view is undefined", и ничего не отображается. Если после создания Viewport я пытаюсь вызвать Ajax, я не получаю никакой ошибки, но перевод не применяется.

Ответы [ 3 ]

1 голос
/ 28 октября 2011

Более элегантным решением было бы позволить автозагрузчику загрузить класс до запуска вашего метода запуска.Вы можете сделать это, определив Ext.view.View как требуется:

Ext.application({
    name: 'KS',

    appFolder: 'app',

    controllers: ['Menu', 'DailyReport', 'DP'],

    // This will make shure the class is loaded before your application runs:
    requires : ['Ext.view.View'],

    launch: function() {
        Ext.Ajax.request({
            url: 'lib/ext-4.0/locale/ext-lang-es.js',
            success: function(response, opts) {
                eval(response.responseText);
            },
            failure: function() {
                Ext.Msg.alert('Error', 'Error al cargar archivos de idioma.');
            }
        });
        Ext.create('Ext.container.Viewport', {
            items: [{
                xtype: 'menu'
            },
            {
                xtype: 'dpedit'
            }]
        });
    }
});

Для получения дополнительной информации обратитесь к extjs api

0 голосов
/ 01 марта 2012

Я решил это очень легко.Это просто и будет работать намного лучше.Поместите это в заголовок документа, после ext.js / ext-all.js и перед вашим app.js.(Я помещаю его в конец language.js согласно руководству по локализации)

var params = Ext.urlDecode(window.location.search.substring(1));
if (params.lang) {
  var url = Ext.util.Format.format('/assets/extjs/locale/ext-lang-{0}.js', params.lang);
  document.write("<script src='" + url + "'><\/script>");
}

Я использую / assets для работы с рельсами 3.1.

Это облегчает настройку= fr в параметрах запроса, остальная часть приложения должна работать в соответствии с руководством.

http://docs.sencha.com/ext-js/4-0/#!/guide/localization

0 голосов
/ 27 октября 2011

Он будет работать в производственном режиме, когда все файлы ext javascript загружаются до запуска вашего приложения.У меня была эта проблема также.Попробуйте сделать это для проверки: импортируйте файл «ext-all.js» и после этого импортируйте ваш языковой файл.Это будет работатьНе лучшее решение, но единственное, которое я нашел, которое работает.

Причина вашей проблемы:

Если вы откроете свой файл перевода, вы увидите такие директивы:

Ext.view.View.prototype.emptyText = "";

Если файл «Ext.view.View.js» не загружен в момент загрузки файла перевода, вы получите сообщение об ошибке, поскольку класс «Ext.view.View» нене существует.

Я надеюсь, что кто-нибудь может помочь вам с лучшим решением.

...