13.02.2017, 11:10
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Проблемы локализации
Совершенно не понятно как правильно написать override для перевода тех или иных частей программы.
На данный момент проблема с колонками грида и кнопками в тулбаре.
Песочница https://fiddle.sencha.com/#view/editor&fiddle/1q4p
Такой override к примеру, заголовок правильно поменяет, а вот колонки он просто перезапишет - то есть по сути удалит все настройки в исходном классе:
Ext.define("Element.locale.ru.office.view.element.workstationList.WorkstationList", {
override: "Ews.office.view.element.workstationList.WorkstationList",
title: "Список рабочих мест",
columns: [{
dataIndex: "PARAMS",
text: "Параметры"
}]
});
Нечто аналогичное происходит с тулбарами и вообще со всеми компонентами, которые перечисляются в массивах (колонки, items, tbar, bbar и тп)
Вдобавок title: "Список рабочих мест" тоже не перезаписывает исходный заголовок таблицы.
Как вы переводите?
Проблему озвучил на:
https://goo.gl/SJwLLH
https://goo.gl/BNxNYP
https://toster.ru/q/397237
Попробовал в модели вида сделать перевод. Но это не работает. Почему-то игнорируется override модели вида:
Ext.define("Element.locale.ru.office.view.element.workstationList.WorkstationListModel", {
override: "Ews.office.view.element.workstationList.WorkstationListModel",
data: {
columnText: {
PARAMS: "Параметры"
}
}
});
columns: [{
...
dataIndex: "PARAMS",
bind: {
text: "{columnText.PARAMS}"
}
}]
Песочница https://fiddle.sencha.com/#view/editor&fiddle/1q4p
В исходных кодах случайно нашел этот тег //<locale type="object">
в файле http://docs.sencha.com/extjs/6.2.0/c...rs.filter.Date
Но как его использовать не понятно. Подставил в свой код, пока действия не оказало.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Последний раз редактировалось khusamov, 13.02.2017 в 12:02.
|
|
13.02.2017, 13:20
|
|
Профессор
|
|
Регистрация: 06.06.2014
Сообщений: 292
|
|
А почему не держать переводы в отдельном файле как константы? У меня получаются вот примерно такие конфиги компонентов:
Ext.define('SafetyRound.view.sr.delegate.Delegate', {
extend: 'Ext.window.Window',
title: Localtext.heading.delegate_as_tasks,
bbar: [
{ handler: 'doConvert',
text: Localtext.button.delegate
},
{ handler: 'closeView',
text: Localtext.button.closewindow
}
],
layout: 'card'
// ...
});
А значения можете или динамически подгружать при загрузке приложения, или из статичного файла с переводами.
|
|
13.02.2017, 14:16
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Конечно можно и так. Но я хочу этот вопрос решить так, как предложили разработчики Сенчи http://docs.sencha.com/extjs/6.2.0/g...alization.html
Они там просто не до конца изложили все. Не объяснили как свои компоненты оформлять. И как переводить компоненты внутри массивов.
Мне их подход нравится тем, что перевод осуществляется на этапе компиляции, а не на этапе выполнения. И памяти ест меньше и быстрее по идее работает.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
13.02.2017, 15:00
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Хотя ваш подход удобен тем, что при рефакторинге будет меньше телодвижений...
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
13.02.2017, 17:44
|
|
Профессор
|
|
Регистрация: 06.06.2014
Сообщений: 292
|
|
Методика локализации от сенчи мне категорически не нравится. И архитектурно и, как вы подметили, изобилием телодвижений. А каждое лишнее телодвижение - это потенциальнй баг. Хотя соглашусь что мой метод требует больше памяти на хранение ключей. Но тут уже можно думать над оптимизацией.
|
|
13.02.2017, 22:18
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Скорее всего они просто не решали еще эту проблему всерьез. Сделали локализацию на основе хаков (через механизм override) и для начала этого вполне достаточно. А вот дальше пока ничего не делают. А было бы неплохо, если они совместили оба подхода.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
14.02.2017, 02:01
|
|
Аспирант
|
|
Регистрация: 12.05.2016
Сообщений: 95
|
|
У меня несколько иная проблема с переводами. Делал по туторилу Сенчи overrides, внося строки локализации, которые отсутствуют в русском переводе.
Мне не понравилась строка в pagingtoolbar с количеством элементов, очень уж длинная. Заменил:
Ext.define("Ext.locale.ru.toolbar.Paging", {
override: "Ext.toolbar.Paging",
displayMsg: 'Показано {0} - {1} из {2}'
});
Проверил — работает.
Однако в production build'е увидел, что строка осталась прежней. В поисках по app.js обнаружил, что стандартная строчка никуда не делась, она просто расположилась ниже, заменив мою собственную, которая почему-то выше.
На форуме сенчи:
https://www.sencha.com/forum/showthr...oduction-build
|
|
14.02.2017, 12:04
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Возможно Ext.define("Ext.locale.ru.toolbar.Paging", {
надо переписать так:
Ext.define("MyApp.locale.ru.toolbar.Paging", {
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
15.02.2017, 03:44
|
|
Аспирант
|
|
Регистрация: 12.05.2016
Сообщений: 95
|
|
khusamov, так тоже работает, но в production build проблема осталась.
|
|
|
|