Проблемы локализации
Совершенно не понятно как правильно написать 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 Но как его использовать не понятно. Подставил в свой код, пока действия не оказало. |
А почему не держать переводы в отдельном файле как константы? У меня получаются вот примерно такие конфиги компонентов:
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' // ... }); А значения можете или динамически подгружать при загрузке приложения, или из статичного файла с переводами. |
Конечно можно и так. Но я хочу этот вопрос решить так, как предложили разработчики Сенчи http://docs.sencha.com/extjs/6.2.0/g...alization.html
Они там просто не до конца изложили все. Не объяснили как свои компоненты оформлять. И как переводить компоненты внутри массивов. Мне их подход нравится тем, что перевод осуществляется на этапе компиляции, а не на этапе выполнения. И памяти ест меньше и быстрее по идее работает. |
Хотя ваш подход удобен тем, что при рефакторинге будет меньше телодвижений...
|
Методика локализации от сенчи мне категорически не нравится. И архитектурно и, как вы подметили, изобилием телодвижений. А каждое лишнее телодвижение - это потенциальнй баг. Хотя соглашусь что мой метод требует больше памяти на хранение ключей. Но тут уже можно думать над оптимизацией.
|
Скорее всего они просто не решали еще эту проблему всерьез. Сделали локализацию на основе хаков (через механизм override) и для начала этого вполне достаточно. А вот дальше пока ничего не делают. А было бы неплохо, если они совместили оба подхода.
|
У меня несколько иная проблема с переводами. Делал по туторилу Сенчи 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 |
Возможно Ext.define("Ext.locale.ru.toolbar.Paging", {
надо переписать так: Ext.define("MyApp.locale.ru.toolbar.Paging", { |
khusamov, так тоже работает, но в production build проблема осталась.
|
Часовой пояс GMT +3, время: 12:45. |