JTV Host - TV on PC
EnglishRussian
о сайте
новости
проекты
файлы
заметки
ссылки
гостинная

Mail to JTVHost



  Заметки в блокноте

World Ready Software:
Возможные варианты и конкретные решения

РейтингВариантыРешенияОтклики

Рейтинг "World Ready"

Любой из вас наверняка сталкивался с ситуацией, когда попадалась интересная программа, но в силу языкового барьера все ее достоинства были вам недоступны или труднодоступны. Если английский язык, на котором пишется большинство программ, является для вас родным или вторым языком, то вы сталкивались с этим реже, иначе - чаще.

Было бы очень хорошо, чтобы программы изначально создавались многоязычными, или с возможностью легко переводить (локализовать) их интерфейс и систему помощи на любой язык. Отрадно отметить, что такие программы (и их авторы) существуют.
В связи с этим имеет смысл определить, пусть достаточно приблизительно, знаки рейтинга "World Ready" и присваивать их программам, авторы которых заботятся обо всех, кто не понимает их языка. Возможно, это стимулирует других авторов. Итак:

World Ready I : Языковые модули могут быть созданы опытными пользователями. Выбор языка возможен изнутри программы. Знак 1-й, высшей, степени присваивается программам, языковые модули которых хранятся отдельно, в одном или нескольких текстовых файлах. Их могут создать или отредактировать опытные пользователи, способные, с помощью любого текстового редактора или программы-переводчика, перевести сообщения интерфейса на другой язык. Выбор языка возможен изнутри программы с помощью меню.
Пример - Windows Commander 4.0x/4.5x.
World Ready II : Языковые модули могут быть созданы опытными пользователями. Выбор языка только извне программы. Знак 2-й степени присваивается программам, в основном соответствующим изложенным для 1-й степени условиям, за исключением того, что выбор языка изнутри программы невозможен и/или требуется ручное редактирование конфигурационных файлов программы.
Пример -
World Ready III : Перевод иетерфейса требует программирования Знак 3-й степени присваивается программам, языковые модули которых хранятся отдельно, в бинарных (обычно - DLL) файлах. Для их создания или редактирования требуются определенные навыки программирования и соответствующее программное обеспечение. Шаблоны файлов для локализации (на английском языке) предоставляются, как правило, автором программы. Выбор языка возможен изнутри программы с помощью меню.
Пример - BTRemote 2000 v1.7.
World Ready IV : Перевод интерфейса требует программирования Знак 4-й степени присваивается программам, в основном соответствующим изложенным для 3-й степени
условиям, за исключением того, что выбор языка изнутри программы невозможен и/или требуется переустановка языкового модуля.
Пример - BTRemote 2000 v1.6, GetRight 4.2.
World Ready  : Языковые модули разрабатываются автором. Этот знак, без степени, присваивается программам, для которых не предоставляются комплекты для их локализации сторонними пользователями, но активная локализация которых ведется их авторами.
Пример - TheBat! v1.4.4.

Знаки не присваиваются программам, для локализации которых требуется их полная или частичная авторская переработка и не ведется разработка готовых языковых модулей, или не предоставляются шаблоны (файлы ресурсов) для их локализации сторонними программистами или пользователями.

Возможные варианты

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

Полагаю, многие согласятся с высказыванием, что единственным по-настоящему ценным достижением XX века является Интернет. Конечно, для его появления должны были развиться соответствующие технологии и науки, но с точки зрения обычного человека их ценность менее значима. По большому счету человеку необходимы три вещи: крыша над головой, здоровье и информация. Имея это, все остальное он может организовать для себя сам.

Крышу над головой мы получили, когда наши предки научились строить шалаши или жить в пещерах. Здоровье, - когда появилась элементарная автоматизация труда и достаточно свободного времени для отдыха. А вот с информацией все не так просто. Конечно, распространение и возможность получить нужную информацию появились с развитием книгопечатания, но согласитесь что доступ к печатной и любой другой информации был ограничен теми или иными властными структурами, или просто невозможностью попасть туда, где она имеется. Лишь с развитием Интернета каждый желающий, сравнительно легко, смог получить практически любую информацию, которая ему нужна в каждый конкретный момент.

С развитием Интернета резко выросло количество самых разнообразных программ, доступных человеку любой страны мира. Если бы все мы говорили на одном языке, то проблем бы не было, однако существует языковый барьер. А поскольку каждый человек, как правило, предпочитает взаимодействовать с программами на родном языке, встала проблема их локализации - перевода сообщений интерфейса и встроенной системы помощи на язык страны конкретного пользователя.

Автор программы, особенно если это один человек, а не коллектив, как правило, не способен создать более двух-трех локализованных вариантов своей программы, да это и не нужно. Нужно лишь так спроектировать саму программу, чтобы все сообщения интерфейса были вынесены в отдельные модули и автоматически подключались при работе программы. Тогда проблему локализации легко решить через Интернет, - всегда найдется желающий перевести ее на свой язык. Оставляя в стороне назначение программы как таковой, прикинем, как она должна взаимодействовать с пользователем и какими чертами обладать, чтобы получить статус "World Ready", т.е. готовности к использованию по всему миру. Приведенная схема, конечно, весьма условна, но позволяет рассмотреть основные применяемые решения. Выделим следующие основные возможности и варианты взаимодействия пользователя с программой:

  1. Возможность установить любой язык интерфейса:
    a. - при запуске инсталятора программы - выбор языка программы-инсталятора,
    b. - при инсталяции программы - выбор одного из пунктов меню в окне программы-инсталятора,
    c. - при первом запуске программы - выбор одного из пунктов меню в окне языков интерфейса.
    d. - изнутри программы - выбор одного из пунктов меню в окне диалога уже установленной программы,
  2. Возможность перевода интерфейса на любой язык с помощью:
    a. - предоставляемого комплекта для локализации,
    b. - обычного текстового редактора,
    c. - стандартных средств программирования,
    d. - специальных средств.
  3. Возможность добавить новый национальный язык интерфейса для стадии:
    a. - запуска инсталятора программы - ввод выбора языка в программу-инсталятор,
    b. - инсталяции программы - ввод нового языкового модуля в состав дистрибутива,
    c. - первого запуска программы - ввод нового модуля в исходный комплект программы,
    d. - использования программы - ввод нового модуля в уже установленную на диске программу.

Если представить соответствие "идеальной" программы вышеизложенным условиям в виде кода, составленного из номеров пунктов, то получится 1abd-2ab-3abd для программ с инсталятором и 1cd-2ab-3cd для программ без инсталятора. Рассмотрим применяемые программистами решения на нескольких примерах конкретных программ.

Конкретные решения

Windows Commander v.4.0х / 4.5х

Этот условно-бесплатный файл-менеджер является хорошим примером практически идеального решения, - с точки зрения перевода на любой язык. Если представить соответствие программы вышеизложенным условиям в виде кода, составленного из номеров пунктов, то получится 1bd-2b-3bd.

Сразу после запуска инсталятора (Install.exe) программы появляется меню выбора языка интерфейса (1b), где предлагается выбрать язык интерфейса программы. Затем предлагается установить все остальные языковые модули, имеющиеся в дистрибутиве. По умолчанию предполагается согласие пользователя, - фокус ввода стоит на кнопке "Yes", хотя правильнее было бы "No". Вряд ли кому могут понадобиться все 14 языков дистрибутива, целесообразнее было бы предусмотреть возможность выбора, например, нужных 2-х или 3-х. Далее программа корректно и без проблем устанавливается в указанный каталог и создается соответствующая папка с ярлыками.

При запуске программы все сообщения интерфейса корректно отображаются на предварительно выбранном языке, поскольку, по умолчанию, для отображения сообщений выбран шрифт "MS Sans Serif, 8". Это именно тот шрифт, который по умолчанию используется в самой операционной системе. В нем, как правило, только один набор символов, только тех, которые нужны для правильного отображения информации на английском и локальном национальном языках. В дальнейшем, через закладку "Конфигурация - Настройка... - Шрифт", можно выбрать любой другой из шрифтов, установленных в системе, однако, если это будет TrueType шрифт, то придется выбрать и корректный набор символов (кодовую таблицу).

Для замены языка интерфейса изнутри (1d) программы нужно открыть закладку "Конфигурация - Настройка... - Язык", выбрать нужный язык из меню и подтвердить выбор. Изменения будут отражены немедленно. Маловероятно, что кто-нибудь захочет постоянно переключать языки интерфейса при работе с программой, однако само наличие такой возможности, позволяющее увидеть, как выглядит интерфейс на другом языке, вносит в любую программу определенную изысканность и стильность.

К сожалению, нигде в дистрибутиве и файле справки программы (и даже на сайте разработчика www.ghisler.com) не говорится, как осуществить локализацию интерфейса. Видимо, предполагается, что желающие обратятся к автору и запросят необходимую информацию и шаблоны у него. Обычно в качестве шаблонов для локализации используются англоязычные языковые модули. Однако в этой программе они встроены непосредственно в тело исполняемого файла, что и обусловливает необходимость их получения с сайта разработчика.
Для каждого языка нужно иметь два модуля: один для сообщений интерфейса (файл wcmd_xxx.lng), другой для меню (файл wcmd_xxx.mnu). В общем случае, в качестве шаблонов могут использоваться любые из уже существующих модулей интерфейса и меню, представляющих собой обычные текстовые файлы определенной структуры.

Для создания нового языкового модуля нужно сделать копию шаблона с соответствующим именем, открыть ее в любом текстовом редакторе (2b), который не добавляет никаких символов форматирования в текст (например, Блокнот), и аккуратно, не затрагивая встречающиеся в тексте специальные символы (\n, \r, \042%s\042 и т.п.) перевести заключенные в кавычки сообщения интерфейса и меню. Ниже приведены фрагменты соответствующих файлов для русского языка.

wcmd_rus.lng :
-------------------------------------------------------------------------------------------
Russian (Русский) Локализовал Михаил Жилин, http://www.aha.ru/~mwz, mailto:mwz@aha.ru
Версия 4.50, 13 июня 2000г.
(Перевод Андрея Маньжова и Михаила Жилина)

0="Нет доступа, или файл\n%s\nуже используется!"
1="Укажите шаблон(ы) файлов (например: s*.doc;*.tx?)"
2="Создать новый каталог:"
3="Параметры командной строки"
4="&Удалить;&Все;Пропуст&ить;&Отмена"
5="&Заменить;&Все;Пропуст&ить;&Отмена"
6="Вы действительно хотите удалить\rфайл \042%s\042 ?"
. . .
------------------------------------------------------------------------------------------

wcmd_rus.mnu :
-------------------------------------------------------------------------------------------
POPUP "&Файл"

MENUITEM "Изменить &aтрибуты...", cm_SetAttrib
MENUITEM "&Упаковать...\tALT+F5", cm_PackFiles
MENUITEM "&Распаковать...\tALT+F9", cm_UnpackFiles
MENUITEM "Про&верить архив(ы)\tALT+SHIFT+F9",518
MENUITEM "Сравнить &по содержимому...", 2022
MENUITEM "О&ткрыть с помощью...", cm_associate
MENUITEM "Сво&йства файла\tALT+ENTER", cm_versioninfo
MENUITEM "Под&считать занимаемое место", cm_GetFileSpace
MENUITEM "&Групповое переименование...\tCtrl+T", 2400
MENUITEM "&Печать\tCTRL+F9", cm_PrintFile
MENUITEM SEPARATOR
MENUITEM "Ра&збить файл...", 560
MENUITEM "Со&брать файл...", 561
MENUITEM SEPARATOR
MENUITEM "&Кодировать (MIME,UUE,XXE)...", 562
MENUITEM "&Декодировать (MIME,UUE,XXE,BinHex)...", 563
MENUITEM SEPARATOR
MENUITEM "В&ыход\tALT+F4", cm_Exit

END_POPUP
. . .
------------------------------------------------------------------------------------------

Для подключения созданных модулей к уже установленной (3d) программе, достаточно скопировать их в подкаталог "WinCmd\Language" и выбрать новый язык изнутри программы. При желании, можно ввести новый язык в дистрибутив программы (3b) и сделать его языком по умолчанию. Для этого нужно распаковать файл install.bin (zip-файл, до версии 4.03) или install.cab (с версии 4.50), добавить созданные языковые модули в каталог "\Language" и переупаковать его, а также отредактировать скрипт инсталятора "Install.inf" из дистрибутива. В приведенном ниже фрагменте скрипта для русской версии 4.50, добавленные или измененные строки выделены .
-------------------------------------------------------------------------------------------
[Installation]
program=Windows Commander 4.50 (32 bit)
copyright=Copyright © 1993-2000 by Christian Ghisler, All Rights reserved

[Versioncheck]
Vernum=2

[Not running]
1=WINDOWSCMD,Windows Commander
2=TAPPLICATION,Windows Commander,Windows Commander

[Destination]
Dir=C:\Program Files\WinCmd
Ini=wincmd.ini,Configuration,InstallDir

[Languages]
Count=15
Default=15
1=English
. . .
14=Slovenski (Slovene),l
15=Russian (Русский),r

[LangName]
langdir=language
0=wcmd_eng
. . .
l=wcmd_svn
r=wcmd_rus
. . .

[ini]
1=wincmd.ini,configuration,languageini
2=wincmd.ini,configuration,Mainmenu
. . .
[inil]
1=wincmd.ini,configuration,languageini,wcmd_svn.lng
2=wincmd.ini,configuration,Mainmenu,wcmd_svn.mnu
[inir]
1=wincmd.ini,configuration,languageini,wcmd_rus.lng
2=wincmd.ini,configuration,Mainmenu,wcmd_rus.mnu

---------------------------------------------------------------------------------------------
Хотелось бы также отменить удобную структуру представления языков в меню. Имеется в виду, что для каждого языка сначала приведено его название на английском, а затем, в скобках, так, как он пишется с применением национальной кодовой таблицы. Поэтому всегда можно понять, о каком языке идет речь, даже если текущая кодовая таблица не поддерживает символы национального языка.

BorgTV v.2.52

Эта бесплатная программа для просмотра ТВ на РС с помощью ТВ платы также является примером хорошего (с некоторыми оговорками) решения. Если представить ее соответствие вышеизложенным условиям в виде кода, составленного из номеров пунктов, то получится 1cd-2ab-3cd.

Программа распространяется в виде комплекта файлов, которые нужно вручную распаковать в созданный каталог. Инсталятор программы (bInstall.exe) служит лишь для создания ярлыков и установки драйверов. При первом запуске () программы выводится диалог выбора языка интерфейса из меню - только на национальном языке - без английского эквивалента. И начинаются проблемы. При выборе, например, "Русский" программа стартует в нечитабельном виде. Это происходит потому, что автор выбрал в качестве шрифта интерфейса по умолчанию "Arial, 10b", но не предусмотрел автоматическое переключение на соответствующую кодовую таблицу (CP1251) и набор символов (204). Было бы правильнее использовать шрифт "MS Sans Serif, 8b", тогда этих проблем не будет.

Для замены языка интерфейса изнутри (1d) программы нужно открыть соответствующее окно диалога (F8), сделать выбор и перезагрузить программу. Языковые модули хранятся в одном текстовом (2b) файле (btv.locale) и имеют предельно простую структуру, позволяющую легко осуществить перевод, даже используя программы-переводчики. Подключение нового языка в уже установленную (3d) программу или дистрибутивный (3c) комплект также просто - нужно лишь заменить имеющийся файл btv.locale его новой, расширенной версией. Ниже приведен фрагмент этого файла.

btv.locale:
-------------------------
[languages]
00=Polski
01=English
02=Deutsch
03=Italiano
04=Lietuviрkai
05=Espaсol
06=Franзais
07=Tьrkзe
08=Иesky
09=Slovakian
10=Nederlands
11=Русский
12=Slovenian

[00]
010=OK
011=Anuluj
012=Tak
013=Nie
. . .

[01]
010=OK
011=Cancel
012=Yes
013=No
. . .

[11]
010=OK
011=Отмена
012=Да
013=Нет
. . .
------------------------

Отрадно отметить, что несмотря на предельную простоту локализации программы, автор разместил на своей странице также и комплект (2a) для локализации - bTVLocaleKit.zip, в состав которого входит краткое руководство и английский языковый модуль.

BTRemote 2000 v.1.7-1.8
BTRemote 2000 v.1.6

Эта бесплатная программа для управления объектами Windows с помощью дистанционного пульта является хорошим примером понимания и поддержки ее автором излагаемого подхода, - в той степени, в какой это его устраивает. Если представить ее соответствие вышеизложенным условиям в виде кода, составленного из номеров пунктов, то получится 1cd-2[a]с-3cd для версий 1.7, 1.8, и 1c-2aс-3d для версии 1.6.

Автор программы Jakub Koralczyk обратился ко мне с просьбой сделать ссылку на его страницу или разместить программу BTRemote на сайте JTVHost. Это была версия 1.6, но не в том виде, в каком она позднее была представлена на сайте. Она имела только польский язык интерфейса и поддерживала только польский и английский языки, причем английского языкового модуля не имела. В результате последующей переписки в духе этого документа, автор, кажется, проникся излагаемым подходом и начал дорабатывать свою программу. Я считаю, очень успешно.

Программа распространяется в виде комплекта файлов, которые нужно вручную распаковать в созданный каталог. При первом запуске () программы выводится диалог выбора языка интерфейса из меню - только на английском языке - без национального эквивалента. Следует отметить, что автор очень грамотно подошел к проблеме выбора языка - программа, по умолчанию, предлагает сделать правильный выбор, если в дистрибутиве есть языковый модуль, при создании DLL-файла которого был выбран язык, соответствующий языковым установкам операционной системы пользователя. В противном случае предлагается английский язык интерфейса. После выбора языка запускается мастер настройки программы на конкретные параметры - все корректно и на выбранном языке.

Для замены языка интерфейса изнутри (1d) программы нужно открыть соответствующее окно диалога и сделать выбор. Язык интерфейса сменится немедленно. Языковые модули хранятся в раздельных DLL-файлах (2c), по одному на каждый язык. Подключение нового языка в уже установленную (3d) программу или дистрибутивный (3c) комплект несложно - нужно лишь поместить новый языковый файл (например, BTRemote.rus) в каталог или архив программы. Создать новый языковый модуль может любой пользователь, имеющий минимальные понятия о программировании и соответствующее программное обеспечение - VC++ 6.0, или аналогичное. Инструкция по созданию нового языкового модуля включена в комплект локализации дистрибутива.

Для версии 1.6 автор сразу предоставил мне исходники английского языкового модуля, на основе которых был сделан первый перевод для русской версии, для версий 1.7 и 1.8 - с задержкой (как выяснилось позднее, не работала почта). Поэтому первоначальный комплект для локализации (2[a]) новой версии (под VC++ 6.0) мне пришлось делать самому, так что свободное предоставление комплекта для локализации автором - в будущем. Остается надеяться, что автор будет немедленно выкладывать на своей странице комплект для локализации каждой новой версии и, по мере поступления, новые языковые модули.

25.07.2000. © Иван Колин, <ivkolin@mail.ru >

Если вы воспользовались приведенной информацией и получили тот или иной результат, или имеете дополнения и уточнения, которые могут быть интересны другим, пожалуйста, напишите об этом по адресу <jtvhost@mailru.com> или в гостевой книге сайта. Ваши отклики будут размещены здесь или в виде отдельной заметки.
Отклики ...

 Copyright © 2000-2002,  Иван Колин   ivkolin@mail.ru Наверх