Найти тему
Электромозг

Локализация приложений в Делфи

Когда твои программы достигают определённого уровня популярности, тебе начинают регулярно поступать просьбы от зарубежных пользователей перевести их хотя бы на английский язык. Так же в один прекрасный день случилось и со мной.

Переборов жестокий приступ жажды мести за мои былые мучения с англоязычными интерфейсами в 90-х годах и подавив в себе практически непреодолимое желание грубо проорать на такую просьбу: «УЧИТЕ РУССКИЙ!!!», я таки решил таки попробовать перевести свою особенно популярную у зарубежных пользователей программу калибровки мониторов на английский язык. Но у Делфи есть серьёзная проблема — встроенный инструмент локализации крайне неудобен, глючен и, в общем-то, заброшен разработчиками этой среды.

Кроме того, чаще всего программисту требуется просто перевести только строки, не затрагивая остальные аспекты локализации (размеры компонентов и т.п.). То есть, обычно нужно что-то очень простое и незамороченное. Понятно, что когда есть штат балбесов и необходимость перевода на китайский или немецкий, то, наверное, имеет смысл заморачиваться и с размерами компонентов. Но обычному автору, выпускающему продукт единолично, важно максимально сократить трудоёмкость сопровождения своей программы.

Я просматривал разные варианты сторонних программ перевода, но ни одна полностью не удовлетворила меня. Однако я сделал для себя несколько важных выводов:

  1. Все строки в любом случае лучше предварительно поместить в секцию resourcestring. Да, при этом труднее будет ориентироваться в коде, ведь жёстко зашитые сообщения в нём всё-таки помогали в этом. Зато вы уже на этом этапе чётко укажите, какая именно часть строки требует перевода, исключив из неё всякие пробелы, двоеточия и прочие символы оформления информации. В дальнейшем это существенно упростит работу в редакторе перевода, в котором уже не будет этого мусора.
  2. Связываться с полноценной локализацией (изменение размеров компонентов, адаптируя их под длину слов другого языка), как я уже писал выше, наверное, не стоит, даже если программа локализации это поддерживает, ибо это добавляет трудоёмкости.
  3. Многие решения на сегодняшний момент очень старые, и глючат в версиях Делфи с поддержкой Юникода.
  4. У многих решений неудобные редакторы перевода, которые своими возможностями напоминают родной редактор Делфи.

В итоге я остановился, пожалуй, на самом оптимальном для меня решении. Мне понравились своей простотой и элегантностью утилиты командной строки Kryvich's Delphi Localizer (KDL).

Версия утилит последний раз была обновлена в ноябре 2018 года, так что они относительно свежие. Прекрасно работают с последними версиями Делфи (на данный момент 10.4). Утилиты поддерживает все платформы Windows и могут использоваться в приложениях VCL и FireMonkey, а также в консольных приложениях без графического интерфейса.

Утилиты прекрасно сканируют drc-файлы проекта и результат сохраняют в текстовые файлы. Специальными маркерами отслеживаются переведённые, непереведённые и удалённые строки.

Но вот есть у этих утилит проблема — нет графического интерфейса и поэтому неудобно работать над переводом. Но ведь это является и их преимуществом — ведь графическую оболочку можно всегда написать самому на собственный вкус, и не ковыряться в неудобных порой редакторах других разработчиков!

Собственно, я это и сделал — написал обёртку KDL GUI. Принципиальными для меня моментами при разработке этой оболочки были следующие:

  1. Оригинальная строка, строка перевода и строка старого варианта перевода (если таковая есть) должны размещаться рядом. Это удобно для осуществления перевода.
  2. Вышеописанные строки по возможности должны быть видны полностью и одновременно. Строка перевода при работе с ней должна быть обязательно видна полностью. Когда весь текст перед глазами, с ним удобнее работать.
  3. Должны поддерживаться и корректно отображаться строки с переносами (многострочный текст).

В итоге интерфейс моего редактора получился вот таким:

Ширину столбцов можно регулировать, пропорции ширин столбцов запоминаются. Текущая ячейка раскрывается в высоту, размер раскрытия настраивается. Высоту каждой строки таблицы можно регулировать. В настройках можно задать и сохранить начальную высоту всех строк таблицы.

В редакторе есть поиск по отмеченным столбцам, быстрый переход к строкам каждого «юнита», а также к первой непереведённой строке. Непереведённые строки отмечаются слева красными маркерами, переведённые в текущем сеансе — зелёными. Есть комбинация клавиш для быстрой замены в редактируемой ячейке переносов разных типов (CR или LF) на стандартный для Windows (CRLF). Ну и, конечно, интерфейс имеет русскую и английскую версии — фактически, оболочка перевела сама себя :-)

Внешний вид оболочки можно менять — в комплекте более сотни стилей, от тёмных до светлых тем. По умолчанию включена тёмная тема в тон тёмной темы среды Делфи.

Вы можете сами оценить удобство работы оболочки, скачав её с официального сайта. Продукт абсолютно бесплатен, как и утилиты. Пользуйтесь!

Спасибо за ваше внимание, ставьте лайки, подписывайтесь на канал, пишите свои мысли на тему локализации в комментариях! Удачи! :-)