Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.02.2017, 11:10
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2017, 13:20
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 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'
	// ...
});


А значения можете или динамически подгружать при загрузке приложения, или из статичного файла с переводами.
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2017, 14:16
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2017, 15:00
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Хотя ваш подход удобен тем, что при рефакторинге будет меньше телодвижений...
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2017, 17:44
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Методика локализации от сенчи мне категорически не нравится. И архитектурно и, как вы подметили, изобилием телодвижений. А каждое лишнее телодвижение - это потенциальнй баг. Хотя соглашусь что мой метод требует больше памяти на хранение ключей. Но тут уже можно думать над оптимизацией.
Ответить с цитированием
  #6 (permalink)  
Старый 13.02.2017, 22:18
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Скорее всего они просто не решали еще эту проблему всерьез. Сделали локализацию на основе хаков (через механизм override) и для начала этого вполне достаточно. А вот дальше пока ничего не делают. А было бы неплохо, если они совместили оба подхода.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #7 (permalink)  
Старый 14.02.2017, 02:01
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 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
Ответить с цитированием
  #8 (permalink)  
Старый 14.02.2017, 12:04
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 15.02.2017, 03:44
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

khusamov, так тоже работает, но в production build проблема осталась.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы со слайдером. Shupamen Работа 1 15.12.2013 00:12
проблемы с PagingToolbar serg3091 ExtJS 4 26.06.2013 09:33
Решение проблемы с отображением элементов на странице mozyr Javascript под браузер 17 13.01.2012 02:34
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47