Интернационализация

В то время как локализация описывает как адаптировать программу к иностранному окружению, интернационализация (или i18n для краткости) детализирует способы общения программы с не-англоговорящим пользователем.

Прежде это делалось с помощью создания абстракций сообщений для вывода их из кода программы. Теперь такой механизм (более или менее) стандартизирован. И, конечно, есть его free реализации!

Проект GNU, наконец, стал на путь создания интернационализированных прикладных программ. Ulrich Drepper (drepper@ipd.info.uni-karlsruhe.de) разработал пакет gettext. Этот пакет лежит во всех GNU архивах, например, в prep.ai.mit.edu. Он позволяет вам разрабатывать программы в направлении, двигаясь в котором вы можете легко заставить их поддерживать большее количество языков. Пакет gettext поставляется с превосходным руководством.

Как принять участие в проекте перевода

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

Кроме команды перевода GNU существуют и другие локальные проекты по локализации программ и переводу документации. Если вы заинтересованы в кириллизации проекта GNOME, то следует обратиться к страничке перевода GNOME. Страничка команда перевода kde расположена на официальной страничке проекта KDE.

Для того, чтобы стать переводчиком сообщений программ в рамках проекта `Free Translation Project', Вам не обязательно нужно быть программистом или очень квалифицированным пользователем. Гораздо важнее хорошее знание русского языка (в том числе, в области компьютерной терминологии), умение избегать орфографических ошибок и грамотно формулировать фразы.

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

  • Станьте участником команды перевода.

    Чтобы стать участником русской команды перевода, подпишитесь на список рассылки tt@chg.ru. Для этого пошлите E-mail на адрес <majordomo@chg.ru> указав в теле письма строку:

    subscribe tt <yourname@yourdomain.com>

    В этой строке замените <yourname@yourdomain.com> на свой собственный адрес электронной почты. Для отправки писем в список рассылки используйте адрес <tt@chg.ru>. Вы можете писать в список рассылки как по-русски, так и по-английски.

  • Установите GNU Gettext и научитесь с ним работать.

    Вы могли бы работать над переводами без установки GNU Gettext. Однако, в этом случае Вы не сможете проверить работоспособность перевода. Если Вы пользуетесь текстовым редактором GNU Emacs, Вам будет полезен режим редактирования PO-файлов, который упрощает работу с файлами перевода. Кроме того, GNU Gettext содержит документацию, которая очень детально объясняет процесс перевода.

    Вы можете взять дистрибутив GNU Gettext с ftp://ftp.gnu.org/pub/gnu/ или c любого зеркала архива GNU. Но, возможно, лучше использовать последнюю неофициальную версию с основного архива проекта перевода GNU (FTP, WWW). Если Вы пользуетесь программой GNU Emacs, возьмите также файл для поддержки режима редактирования PO-файлов (FTP, WWW).

    И, наконец, прочитайте info-документацию пакета GNU Gettext. Можно подготовить и печатную версию документации, выполнив команды "make dvi ; dvips gettext.dvi" в каталоге doc/ дистрибутива Gettext.

  • Заполните и пошлите "disclaimer" для переводчиков.

    Чтобы Ваши переводы были включены в дистрибутивы программ GNU, необходимо отправить в организацию Free Software Foundation документ, чётко определяющий правовой статус Ваших переводов. Форму для заполнения можно найти по этому адресу.

    Распечатайте эту форму, ознакомьтесь с содержанием, заполните, поставьте дату и подпись. После этого запечатайте лист в конверт и пошлите его по указанному там адресу. Возможно, пройдет несколько недель, пока письмо дойдет по назначению и будет обработано. Когда это произойдет, Вы получите E-mail с подтверждением, а также сможете найти свое имя в файле AUTHORS в центральном архиве проекта перевода GNU.

  • Возьмите подходящую программу, сообщения которой ещё не переведены.

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

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

    Перед началом перевода не забудьте ознакомиться с рекомендациями по переводу сообщений на русский язык в разделе “Рекомендации по переводу сообщений программ”. Возможно, приведенные там соображения помогут Вам в неизбежных вопросах "Как лучше перевести ту или иную фразу?".

  • Включайтесь в реальную работу по переводу!

Допустим, Вы решили перевести сообщения пакета "gettext-N.M" (N.M — номер версии). Возьмите в дистрибутиве программы файл шаблона "po/gettext.pot" и скопируйте его в рабочий файл "gettext-N.M.ru.po". Шаблон обычно начинается такими строками:

# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR &lt;EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+DIST\n" "Last-Translator: FULL NAME &lt;EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE &lt;LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n"

Замените все слова в верхнем регистре реальной информацией и удалите строку с текстом "#, fuzzy". Если возникают сомнения в правильности заполнения заголовка, Вы можете посмотреть в качества примера уже имеющиеся файлы перевода на другие языки, либо русские переводы сообщений других программ. Заметьте, что последние строки заголовка для переводов на русский язык должны выглядеть так:

"Language-Team: Russian &lt;ru@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=koi8-r\n" "Content-Transfer-Encoding: 8bit\n"

Как следует из заголовка, весь перевод необходимо выполнять в кодировке KOI8-R, являющейся стандартом де-факто для Unix-подобных свободно распространяемых операционных систем.

Оставшаяся часть PO-файла содержит сообщения, подлежащие переводу. Например, непереведенное сообщение может выглядеть так:

#: lib/error.c:88 msgid "Unknown system error" msgstr ""

В пустую строку с ключевым словом `msgstr' нужно вписать русский перевод фразы, показанной в строке `msgid':

#: lib/error.c:88 msgid "Unknown system error" msgstr "Неизвестная системная ошибка"

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

После того, как перевод закончен (или Вы желаете проверить корректность перевода части сообщений), PO-файл нужно обработать утилитой msgfmt для получения индексированного двоичного файла перевода. Например, команда

msgfmt -o gettext.mo gettext-N.M.ru.po

сформирует файл gettext.mo, который готов для использования переведённым Вами пакетом gettext. Если поместить этот файл в каталог сообщений локализации (например, это может быть каталог /usr/share/locale/ru/LC_MESSAGES/) и установить переменную окружения LANGUAGE в значение "ru", то программы пакета gettext будут отображать переведённые сообщения по-русски. Впрочем, работоспособность этого примера может зависеть от используемой операционной системы, версии системных библиотек GNU, корректности их установки и т.д.

Когда, наконец, PO-файл будет готов, Вы можете отправить его русской команде перевода (например, послать анонс в список рассылки tt@chg.ru). Если с переводом все в порядке, можно отправить перевод на адрес translation@iro.umontreal.ca для последующего включения в официальный дистрибутив пакета программ. Включение файла перевода в официальный дистрибутив может быть отклонено, если от Вас не был получен "disclaimer", если кто-либо другой в команде перевода уже был закреплен за переводом данного пакета программ, или в случае официального отказа русской команды перевода принять Вашу работу. Команда перевода рассматривается в качестве основного авторитета в отношениях с проектом перевода GNU, поэтому важно согласовывать свою работу с остальными участниками команды.

Более подробную информации о проекте `Free Translation Project' Вы можете найти на центральном архиве проекта:

Рекомендации по переводу сообщений программ

Максимум внимания при переводе сообщений следует уделять достижению двух главных целей:

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

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

Ниже сформулированы несколько важных рекомендаций, которые являются следствиями соображений, приведенных выше.

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

    Пример:

    Исходная фраза:

    "The following options can be used to define the colors to use for different things:"

    Вот вариант дословного перевода, который выглядит совершенно нелепо:

    "Следующие опции могут быть использованы для того, чтобы определить цвета, которые следует использовать для различных вещей:"

    Более удачный перевод:

    "Для указания цвета различных элементов оформления можно использовать следующие ключи:"

  • Самое очевидное правило — не допускать орфографических и грубых фразеологических ошибок. Как ни парадоксально, в нашем случае для переводчика важнее хорошо знать русский язык, нежели в совершенстве владеть английским. Это объясняется тем, что потреблять результаты перевода будут главным образом те люди, для которых родной язык — русский.

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

  • Не рекомендуется составлять фразы от первого лица. Такая практика широко распространена в англоязычных сообщениях, но в русскоязычных программах применяется редко.

    Таблица 6.1. Пример перевода:

    фразаправильноне удачно
    Can't open fileОшибка открытия файлаНе могу открыть файл
  • Не рекомендуется начинать каждое слово надписей с заглавных букв, как это часто делается в англоязычных программах для пунктов меню, подписей к элементам управления окон диалога, заголовков окон. То же относится к заголовкам разделов документации: в русском языке принято делать заглавной только первую букву заголовка.

  • Не следует переводить названия программ, имена людей и общепринятые английские сокращения.

Главная проблема перевода — сложность подбора русских эквивалентов к некоторым англоязычным терминам: не всегда существует общепринятый русский перевод, а дословная интерпретация часто не соответствует смыслу оригинального термина. В таких случаях трудно что-либо рекомендовать и выбор оптимального варианта остаётся за переводчиком. Неплохая мысль в таких случаях — ознакомиться с другими вариантами перевода данного термина в литературе или локализованных версиях других программ. В качестве крайнего случая, когда подобранный русский эквивалент вызывает двусмысленность, можно оставить в скобках оригинальный термин на английском языке, хотя в идеале таких ситуаций возникать не должно.

Приведённые здесь правила носят рекомендательный характер и не являются "официальной догмой". Их цель — объединить переводчиков единым подходом к работе, в результате которой конечные пользователи получили бы качественно локализованные версии программных продуктов. Любые мнения и пожелания по содержанию этой странички будут с благодарностью приняты.