Вступление
Тем более что идеология быстрой заменяемости строковых ресурсов в проекте (следовательно, и в готовой программе) была давно и безвозвратно нарушена по причине наличия массы более важных и безотлагательных задач — пусть это будет моя личная версия истории проблемы.
Актуальность вопроса локализации современных программных приложений сегодня уже можно поставить под сомнение, так как в современные мощные средства разработки и программные платформы, как правило, изначально заложены достаточные для некоторых типовых задач возможности локализации разрабатываемых современных решений. И это справедливо не только для Windows. В то же время перед разработчиками, как и десять лет назад, встает все та же задача по обеспечению интернационализации (или локализации) давно написанного ПО. А в случае, если создавалось оно сторонними программистами и всякие контакты с ними навсегда потеряны, сюда иногда добавляется еще и пикантная проблема отсутствия исходного текста, т.е. самого проекта. В этом случае весьма нелишним будет знать те инструменты, которые существуют для решения подобных задач.
Определение
Чтобы понять важность этапа проектирования самого решения с точки зрения последующей его адаптации для конкретного региона, можно дословно привести цитату из Википедии (http://ru.wikipedia.org): «Есть важное различие между интернационализацией и локализацией. Интернационализация — это адаптация продукта для потенциального использования практически в любом месте, в то время как локализация — это добавление специальных функций для использования в некотором определенном регионе».
Отсюда для опытного разработчика напрашивается вывод: чем точнее он учтет и реализует функциональность, связанную с интернационализацией его программного продукта, тем больше шансов свести к минимуму последующие усилия по его локализации.
Круг проблем
Сама локализация может включать в себя перевод текстовых ресурсов графического интерфейса пользователя, документации, входящей в состав программного пакета, и более сложные работы, связанные с изменениями фрагментов исходного кода на уровне алгоритмов. Случается, что последний пункт иногда можно считать результатом просчетов на ранних стадиях работы над проектом. К примеру, такие вроде бы невинные вещи, как использование какого-то одного фиксированного формата строкового представления даты-времени в алгоритме обработки данных, могут повлечь за собой не только серьезные ошибки, но и непредвиденную трату большого количества времени на их выявление и борьбу с последствиями.
Очень часто встает отдельная, многоплановая, не всегда заметная при первом взгляде на проблему задача по локализации сообщений об ошибках, но актуальность ее в большей степени зависит уже от концепции программного пакета.
О главном
Сказать, что темой статьи является перевод пользовательского интерфейса, будет не совсем верно, потому что, как мы увидим из рассматриваемых решений, в тех случаях, когда имеет место профессиональных подход к качеству коммерческого программного продукта, грань между интернационализацией и собственно локализацией может стираться.
Мы рассмотрим только средства для локализации проектов в среде Delphi для Win32. Кстати, стоит заметить, что в этой IDE уже реализован один из способов локализации приложения.
Основное удобство этого решения заключается в его изначальном присутствии в Delphi, без дополнительной установки каких-либо программ и компонентов. Более подробную информацию о мастере добавления языков можно получить в соответствующих разделах справочной системы Delphi.
Методы решений
Итак, для упрощения нелегкой жизни разработчика существует ряд специализированных утилит и комплексных программных пакетов, которые позволяют значительно сократить затраты на локализацию. Кроме того, есть отдельный ряд программ, формально не относящихся к подобным утилитам, но имеющих, к примеру, удобный доступ к строковым ресурсам .exe- и .dll-файлов с возможностью их редактирования.
Возможные сравнительные характеристики сторонних продуктов
При выборе рассматриваемых решений мы руководствовались прежде всего такими критериями, как совместимость с Delphi 2006 (Win32), внятное указание на тип лицензии, наличие в пакете готовых примеров по локализации проектов. Наличие исходных текстов и возможность работы непосредственно с готовыми exe-модулями можно в общем случае считать дополнительными, но не обязательными характеристиками.
Во главу угла ставится удобство процесса локализации, ибо такие возможности, как динамическая смена языка, на поверку оказываются менее важны, чем, например, функциональное разграничение этапов подготовки локализации. Не будем забывать: программист зарабатывает на хлеб в основном все-таки не тем, что владеет иностранными языками... И ярче всего это проявляется, когда речь идет о переводе на экзотические языки.
Бесплатные решения
«ДеЛок»
Программный пакет «ДеЛок» («Дельфийный локализатор» — так расшифровывают название сами разработчики продукта) распространяется свободно, т.е. его можно использовать в любых проектах, включая условно бесплатные (shareware) и коммерческие.
Далее надо включить в проект локализуемого приложения файл LcUnit.pas, который входит в пакет вместе с «локализатором».
Во время создания формы, подлежащей локализации, необходимо вызвать для нее функцию TranslateComponent(). Вызов функции можно поместить в перегруженный конструктор формы (сразу после inherited) или в обработчик события OnCreate. В случае, если формы наследуются от одной базовой формы, можно поставить вызов функции TranslateComponent() только в ней.
В пакет входит файл русской справки и успешно запускаемый под Delphi 2006 демопроект, показывающий возможность переключения «на лету» русского и английского языков для основных элементов управления. Более подробно о работе модуля LcUnit.pas можно узнать из справочного файла или из файла readme_ru.txt.
На этом, пожалуй, стоит закончить весьма короткий список полноценных бесплатных решений для локализации. К сожалению, другие найденные утилиты, имеющие бесплатную лицензию, никак не дотягивали до профессиональных пакетов.
Коммерческие пакеты
Helicon Translator
На сайте http://www.helicon.co.at/translator/ имеется 30-дневная ознакомительная версия Helicon Translator.
Важная особенность пакета заключается в том, что он позволяет работать как с файлом проекта, так и с бинарными модулями .exe, .bpl и .dll.
На этапе создания проекта транслятор в целях предотвращения ошибок может дважды уточнять версию использованной или используемой в текущий момент среды компилирования.
Недостаток исследуемой версии — отсутствие у нее явных признаков, свидетельствующих о возможности корректной работы с проектами Delphi 2006.
Advanced Localizer
Весьма серьезная фирма — разработчик ПО EMS, славящаяся своими мощными, универсализированными средствами администрирования для различных СУБД, предлагает набор компонентов для локализации под названием EMS Advansed Localizer Component Suite 1.51 (http://sqlmanager.net/products/tools/quicklocalizer).
Продукт поддерживает все версии Delphi с 5-й до Delphi 2006.
Готовые наборы строк, соответствующие одному конкретному языку, хранятся отдельно в виде INI-файла. Однако при всем удобстве решения в процессе работы со встроенными редакторами этих замечательных компонентов в режиме дизайна неоднократно выдавались сообщения с загадочными программными исключениями и дважды «сваливалась» сама среда Delphi. С пакетом поставляется help-файл и три демопроекта, из которых, в частности, можно понять, что данные с языковыми переводами можно держать не только в виде обычного текстового файла, но и в базе данных.
TsiLang
Как сказано в статье, «пользователи смогут переводить ваше приложение без вашего участия и перекомпиляции».
Теперь по поводу поддержки Delphi 2007. В апреле 2007 г., когда писалась эта статья, на сайте разработчиков можно было прочитать следующее (перевод с англ. автора): «Мы много работаем над завершением версии 6.1 и ее инсталлятора, которые будут поддерживаться в Delphi 2007. В данный момент на нашем сайте доступна новейшая версия, уже поддерживаемая в Delphi 2007. Для ее применения необходимо во время инсталляции использовать опции Turbo Delphi и вручную установить TsiLang в IDE».
Фрагмент внутреннего представления компонента класса siLang из демопроекта RicheditDemo представлен в листинге 2.
Когда в бассейне нет воды, или Про бойцов из стройбата
Задача немного усложняется, если у вас нет ни исходных текстов, ни магического map-файла программы, но вам во что бы то ни стало надо заменить какие-то строковые ресурсы графического интерфейса программы. Как раз в таких случаях можно попробовать воспользоваться поистине замечательной программой Restorator.
Программа позиционируется как утилита для редактирования ресурсов и пользовательского интерфейса. Сейчас с сайта разработчика (http://www.bome.com/Restorator/) можно загрузить новую ознакомительную версию Restorator 2007. Конечно, использование таких вариантов локализации, мягко говоря, не стандартно, но не стоит радоваться заранее, так как этот прием годится далеко не в каждом случае... В программе есть режим просмотра и режим редактирования ресурсов, есть возможность быстрого поиска строки. Во время редактирования автоматически создаются резервные копии версии редактируемой программы. Вот так выглядит окошко знаменитой на весь дельфийский мир программы richedit.exe после прохождения через Restorator: