Как стать автором
Обновить

Поддержка RTL интерфейсов в GXT (Ext GWT)

Время на прочтение3 мин
Количество просмотров2.5K
Вот уже несколько лет являюсь разработчиком одного корпоративного десктоп приложения для восточных пользователей. Особенностью разработки является необходимость обеспечить поддержку ориентации справа-налево (RTL) в пользовательском интерфейсе.

Недавно встал вопрос о хотя бы частичной миграции функционала в веб. Как средство разработки была выбрана платформа GWT. Выбор обусловлен тем, что наиболее привычной технологией для себя считаю Java. Также очень хотелось попробовать какую-нибудь новую для меня современную платформу разработки.

Через довольно непродолжительное время обнаружилось, что набора стандартных компонент будет явно недостаточно для дублирования уже существующего интерфейса десктоп приложения. В результате недолгих поисков было найдено 2 достаточно мощных расширения для GWT: SmartGWT и Ext GWT (GXT). Посмотрев демо как одного так и другого фреймворка, я пришел в некоторое замешательство на каком из них остановиться. Погуглив немного, я все же решил остановиться на GXT. Среди преимуществ пользователи отмечали, что большинство компонент могут быть расширены посредством языка Java. SmartGWT же в большинстве случаев является всего лишь оболочкой над JavaScript кодом. Проверять я это не стал — поверил на слово.

Довольно быстро обнаружилось, что, несмотря на всю огромную мощь GXT фреймворка, разработчики оного решили обойти своим вниманием поддержку RTL интерфейсов и языков с написанием справа-налево. На официальном форуме были найдены несколько тем, в которых пользователи просили добавить поддержку RTL в GXT. Но разработчики всюду отписывали, что такая поддержка пока не планируется, а если и планируется, то, может, аж где-то в GXT 3.x, т.е. очень не скоро.

Но также был найден топик пользователя bentins, который не поленился и выложил свои труды по добавлению поддержки RTL в GXT фреймворк в публичный доступ. Одна беда: поддержка RTL была добавлена для GXT версии 2.1.1. На тот момент актуальной уже была версия 2.2.2. Также Desktop компонент bentins обделил вниманием (компонент, который эмулирует рабочий стол ОС).

Потестировав немного труды автора было принято решение начать разработку поддержки RTL для актуальной на тот момент версии GXT 2.2.2. Начался поиск и портирование изменений проведенных bentins'ом. Поначалу их было очень трудно находить. Но потом на помощь пришла очень мощная утилита для сравнения каталогов и файлов Beyond Compare. С новым инструментом работа пошла значительно быстрее. Не все патчи работали одинаково хорошо в версии 2.2.2. Была проделана большая работа по адаптированию и добавлению новых исправлений во многие компоненты включая Desktop. Наиболее трудным оказалось добавить поддержку RTL для панели с табами TabPanel, т.к. многие вычисления в коде компонента пришлось переделывать.

После того, как основная работа была закончена, началось портирование стандартных тем. Необходимо было создать свои стили а также перерисовать некоторые картинки для RTL локалей. Работа не столько трудная сколько рутинная.

Разработка тянулась довольно медленно с длительными простоями и официально GXT успела добраться до версии 2.2.4. Благо добавленные изменения никак не затрагивали RTL возможностей и были тут же добавлены в проект.

К сожалению, проект удалось протестировать не во всех броузерах. Тестирование ограничивалось Chrome dev build, FF 4/5, IE9. Также не все ошибки удалось исправить (ох IE). Но получившийся результат уже можно использовать как отправную точку в большинстве случаев где необходима поддержка RTL.

По примеру bentins'а я решил выложить все наработки в открытый доступ в интернет. Если кто-нибудь думал начать разработку на GXT, но его останавливало отсутствие возможности использовать фреймворк для RTL интерфейсов, надеюсь проделанная мною работа ему поможет. Также если кто-нибудь готов поддержать проект своими исправлениями и наработками буду только рад.

Демо:
Desktop RTL
Explorer RTL

Исходники, инструкции по установке
Теги:
Хабы:
Всего голосов 16: ↑15 и ↓1+14
Комментарии2

Публикации