Сообщество GNOME

Вики русскоязычной команды

Инструменты пользователя

Инструменты сайта


rukovodstvo_perevodchika_gnome

Руководство переводчика GNOME

В данной статье описывается процесс перевода модулей GNOME. Для координации рабочего процесса мы используем онлайн-систему Damned Lies.

См. также:

В настоящем документе описаны технические и организационные стороны процесса перевода GNOME на русский язык. Этот документ призван помочь начинающим участникам проекта GNOME.

Подразумевается, что читатель имеет общее представление о свободном программном обеспечении и о проекте GNOME.

Введение

Большое внимание в GNOME уделяется переводу рабочей среды на всевозможные языки. В первую очередь необходимо перевести пользовательский интерфейс приложений (надписи на кнопках, пункты меню и т. д.), а также документацию к ним. Для этих целей в GNOME используется инструментарий gettext.

Принцип работы gettext заключается в следующем. Когда программист пишет исходный код приложения, он особым образом помечает сообщения (надписи и т. п.), которые подлежат переводу. Они автоматически извлекаются из исходного кода и помещаются в отдельный файл — каталог сообщений. Этот файл переводится на различные языки, и переведённые версии файла загружаются в общее git-хранилище проекта GNOME. После этого приложение собирается уже с поддержкой всех этих языков, и пользователь может легко переключаться между ними (с помощью механизма, называемого локалью). Для документации этот процесс выглядит примерно так же.

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

Перевод модуля — шаг за шагом

Шаг 1. Выбор модуля

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

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

  • Зелёный цвет означает сообщения, которые переведены.
  • Фиолетовый цвет означает так называемые «fuzzy» (то есть «неясные») сообщения. Это те сообщения, которые были когда-то переведены, но с тех пор успели измениться в оригинале. Обычно такие сообщения нуждаются в исправлении. Например: в программе могла быть кнопка с надписью «Close», переведённой как «Закрыть». Если разработчик изменит надпись на «Quit», то соответствующее сообщение будет помечено как fuzzy, и его нужно будет исправить (в данном случае — на «Выйти»). Если fuzzy-сообщения не исправить, они будут рассматриваться как непереведённые.
  • Красный цвет означает сообщения, которые не переведены.

Числа в скобках слева от индикатора обозначают количество соответственно переведённых, fuzzy и непереведённых сообщений.

Выберите модуль, который хотите (до)перевести. Теперь вам нужно скачать собственно файл с сообщениями, который вы и будете переводить — он часто называется po-файлом (оттого, что обычно имеет расширение «po»). Название модуля на странице состояния перевода является ссылкой на этот файл.

Шаг 2. Перевод файла

po-файл, который вы скачали, — это обыкновенный текстовый файл в кодировке UTF-8. Его можно править почти любым современным текстовым редактором (даже Блокнотом Windows), а некоторые редакторы (например, gedit) ещё и имеют подсветку синтаксиса для файлов такого формата. С другой стороны, существуют специальные программы, которые способны упростить работу по переводу. Для первого раза мы всё-таки воспользуемся обычным текстовым редактором.

Перед началом перевода лучше сделать копию скачанного файла — она может потом пригодиться.

В начале файла идёт несколько строк заголовков, содержащих различную служебную информацию. Если вы дополняете уже существующий перевод (что наиболее вероятно, если только вы не взяли для перевода какой-то совершенно новый модуль), эти заголовки уже заполнены нужными значениями. Вам придётся только исправить поле Last-Translator, указав в нём своё имя и адрес электронной почты; а также поле PO-Revision-Date, в которое нужно поместить текущее время и дату, когда вы закончите перевод. Подробнее о заголовках см. [FIXME].

Далее идут собственно сообщения, подлежащие переводу. Каждое из них оформляется приблизительно следующим образом:

#. Translators: this messagge will apper immediately after the 
#. usage string - Usage: COMMAND [OPTION]... <THIS_MESSAGE> 
#: ../src    /libtracker/tracker-tag.c:86 
msgid "FILE... - manipulate tags on files" 
msgstr "ФАЙЛ... - управление метками на файлах"

В этом примере:

  • Первые две строки — это комментарии авторов оригинала. Они обычно даются в неочевидных случаях, например, когда переводчики могут неправильно понять смысл сообщения. Для большинства сообщений комментарии не указываются.
  • Третья строка указывает, где в исходном коде программы (или документации) находится оригинал сообщения. Сначала идёт путь к файлу, затем, после двоеточия, номер строки в этом файле.
  • Четвёртая строка, помеченная «msgid», — это оригинал сообщения.
  • Пятая строка, помеченная «msgstr», — это перевод сообщения.

Если сообщение не переведено, то поле msgstr будет пусто — вы должны будете заполнить его своим переводом. Если сообщение имеет статус fuzzy, то оно будет отмечено приблизительно следующим образом:

#: ../data/gnome-power-manager.schemas.in.h:60 
#, fuzzy 
msgid "Notify on a low power" 
msgstr "Извещать об ошибках HAL"

Здесь сразу видно, что перевод устарел: раньше в оригинале говорилось об ошибках HAL, а теперь — о разрядившейся батарее. Поэтому сообщение помечено как fuzzy во второй строке. После исправления сообщения пометку нужно удалить.

Длинные сообщения принято для удобства чтения «разрезать» на более короткие, по 80 символов, вот так:

#: ../eog.schemas.in.h:23
msgid ""
"Whether the image should be interpolated on zoom or not. This leads to "
"better quality but is somewhat slower than non interpolated images."
msgstr ""
"Должно ли изображение быть интерполировано при масштабировании. Это повышает "
"качество, но уменьшает скорость обработки изображения."

Программы для редактирования po-файлов способны автоматически разрезать сообщения. Если же вы работаете в обычном текстовом редакторе, вы можете воспользоваться для этого специальным инструментом (см. [FIXME]).

В самом конце файла вы можете обнаружить несколько сообщений, которые «закомментированы»: в начале строк стоят символы комментариев «#». Это сообщения, оставшиеся от старых версий модуля и более не используемые. Их можно удалить. А можно и не удалять.

Итак, ваша задача теперь — перевести все непереведённые сообщения, исправить все fuzzy и сохранить файл. Затем можно будет перейти к третьему этапу или четвёртому этапу.

Шаг 3. Проверка перевода

После окончания перевода можно непосредственно оценить его качество, применив к приложению, для которого он предназначен.

Обычно скомпилированные po-файлы (mo-файлы) находятся в каталоге /usr/local/share/locale (mo-файлы с русским переводом в /usr/share/locale/ru/LC_MESSAGES/). Чтобы непосредственно увидеть результат своего труда делаем следующее:

  • (до)переводим po-файл;
  • компилируем po-файл. Сделать это можно с помощью утилиты msgfmt, для случая, когда файл переводится в текстовом редакторе. Специализированные редакторы вызывают эту утилиту самостоятельно при каждом сохранении файла.
  • записываем полученный mo-файл в соответствующий каталог, удалив в этом каталоге предыдущую версию mo-файла;
  • запускаем приложение и оцениваем результат.

Шаг 3.1 Проверка перевода файла документации

Файл документации обычно представлен в формате xml, для просмотра с помощью программы yelp (Программа просмотра документации для среды GNOME). Непереведённые файлы документации представляют собой один или несколько файлов xml и набор иллюстраций. Шаблоны файлов перевода документации обычно находятся в /usr/share/gnome/help/<имя_программы>/C. Переведённая документация будет храниться в /usr/share/gnome/help/<имя_программы>/ru. Для преобразования po-файлов документации в xml и обратно существует утилита xml2po.

Непереведённые иллюстрации обычно хранятся в /usr/share/gnome/help/<имя_программы>/C/figures. На некоторых из них изображены окна программ, содержащие нелокализованные надписи. В этом случае в ru/figures следует положить снимок окна локализованной программы.

Проверка перевода документации в формате Mallard

Создать документацию можно двумя способами: с помощью Mallard и с помощью более старого формата Docbook, который всё ещё используется для некоторых модулей. Ресурс Damned Lies обозначает модули, использующие формат Mallard, значком с изображением утиной головы (похоже на вопросительный знак). Рекомендуется переводить в первую очередь документацию в формате Mallard, т. к. документация в старом формате скорее всего будет переписываться.

Далее приводится инструкция для проверки перевода документации в формате Mallard.

Перейдите в каталог help и создайте в нём временный каталог для сборки вашего перевода:

cd help
mkdir -p tmp

Перейдите в каталог, в котором находятся файлы с расширением page:

cd C

Теперь создадим файл с переводом для каждого файла с английским текстом (допустим, файл с переводом находится в ../ru/ru.po):

for i in *.page; do xml2po -m mallard -p ../ru/ru.po $i > ../tmp/$i; done

Теперь откройте переведённую документацию с помощью yelp из каталога, в котором находятся ваши файлы:

yelp ../tmp

Вы не сможете увидеть изображений, но вы сможете просмотреть их альтернативный текст. Чтобы вставить изображения, скопируйте C/figures/ (или другой подобный каталог) в свой временный каталог.

Проверка перевода в формате docbook

Некоторая документация использует формат docbook. Чтобы проверить сделанный перевод, сначала необходимо локализовать docbook с помощью подготовленного po-файла:

xml2po -p docs/ru/ru.po docs/C/index.docbook > docs/ru/index.ru.docbook

Если в каталоге C имеются дополнительные xml-файлы, скопируйте их в каталог ru:

cp docs/C/legal.xml docs/ru/legal.xml

Перейдите в каталог ru и выполните в нём команду:

gnome-doc-tool html index.ru.docbook

После этого в каталоге должны появиться html-файлы с переведённой документацией, которые можно открыть любым веб-браузером. Например:

firefox index.ru.html

Шаг 4. Отправка перевода

После того, как собственно перевод закончен, нужно поместить его в git-хранилище GNOME, где хранятся все исходные файлы всех компонентов среды. Права на запись файлов в хранилище есть только у определённых лиц. Вы можете выложить перевод в системе Damned Lies или отправить переведённый po-файл в список рассылки gnome-cyr@gnome.org. В этом списке рассылки происходит обсуждение перевода GNOME на русский язык, а также рассмотрение конкретных переводов. Ваш перевод будет просмотрен одним из разработчиков, имеющих доступ на запись в git, и загружен.

Предпочтительным вариантом отправки перевода является сервис Damned Lies. Если вы хотите отправить перевод в список рассылки, на него необходимо подписаться, поскольку в список рассылки сообщения могут отправлять только подписавшиеся участники. Если вы отправляете перевод в список рассылки, желательно сжать его, например при помощи gzip:

]$ gzip epiphany-gnome-2-18.ru.po

Для Damned Lies файл с переводов сжимать не нужно.

Получившийся файл с расширением gz нужно отправить в список рассылки в виде вложения.

Другой (менее рекомендуемый) способ помещения перевода в хранилище — отправить его напрямую одному из переводчиков, имеющих доступ на запись. Их иногда можно встретить, например, на IRC-канале #gnome-ru сети GIMPnet.

Вот и всё! Перевод закончен.

Тонкости перевода po-файлов

Множественное число

Вы, наверное, встречали в некоторых программах надписи наподобие «Выделено объектов: 4» или «Файлов в папке: 1». Согласитесь, звучит это несколько неестественно. К счастью, инструментарий gettext поддерживает функции, которые позволяют в таких случаях строить удобочитаемые переводы: «Выделено 4 объекта», «В папке 1 файл».

Начнём с простого примера. Пусть мы имеем такое сообщение:

#: ../libgossip/gossip-chatroom.c:974
msgid "Moderator"
msgid_plural "Moderators"

Специальное слово «plural» говорит о том, что в сообщении может использоваться множественная форма (если модераторов больше одного). Тогда наш перевод будет выглядеть так:

#: ../libgossip/gossip-chatroom.c:974
msgid "Moderator"
msgid_plural "Moderators"
msgstr[0] "Модератор"
msgstr[1] "Модераторы"

Здесь msgstr[0] соответствует форме единственного числа, а msgstr[1] — форме множественного числа.

В этом примере использовалось простое разделение: один модератор / много модераторов. Но в более сложных случаях, когда в самом сообщении фигурирует точное количество, возникает ещё одна тонкость: в русском языке две множественные формы (две коробки, но восемь коробок). Посмотрите на следующий пример:

#: ../DiskManager/DiskManager.py:320
msgid "%i new partition can be configured."
msgid_plural "%i new partitions can be configured."

Видно, что в правильном переводе будут фигурировать две формы: «раздела» и «разделов». Вот как нужно оформить перевод в таком случае:

#: ../DiskManager/DiskManager.py:320
msgid "%i new partition can be configured."
msgid_plural "%i new partitions can be configured."
msgstr[0] "%i новый раздел может быть настроен."
msgstr[1] "%i новых раздела могут быть настроены."
msgstr[2] "%i новых разделов могут быть настроены."

Выбор множественной формы осуществляется согласно значению переменной i. Например, если i=2 (то есть по контексту говорится о двух разделах), то будет использована первая множественная форма — msgstr[1].

Для правильной работы с множественными формами нужно поместить следующие строки в описательную часть po-файла:

"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

Эта формула определяет, какой из вариантов msgstr[] будет выбран в зависимости от значения. Она верна для русского языка, но может быть неверна для других.

После добавления этой формулы описательная часть po-файла будет выглядеть примерно так:

msgid ""
msgstr ""
"Project-Id-Version: f-spot trunk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-08-06 03:26+0100\n"
"PO-Revision-Date: 2007-07-29 01:49+0300\n"
"Last-Translator: Alexandre Prokoudine <alexandre.prokoudine@gmail.com>\n"
"Language-Team: Russian <gnome-cyr@gnome.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

Урезание строк

FIXME

Специализированные редакторы

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

Пожалуй, наиболее подходящим для новичков редактором можно считать poEdit. Чем же он хорош и чем его использование отличается от использования, к примеру, gedit?

Обычному текстовому редактору (несмотря на то, что некоторые из них поддерживают подсветку синтаксиса po-файлов) не хватает быстроты навигации по различным типам сообщений. Конечно, можно, например, ввести в строку поиска «fuzzy» для поиска всех неактуальных переводов, но всё же подобные архаичные методы работы для многих переводчиков могут оказаться неудобными.

Вот некоторые возможности, которые предоставляет poEdit:

  • группировка сообщений и их цветовая индикация по типам;
  • создание закладок;
  • автоматизация работы с описательной частью po-файлов;
  • автоматическая компиляция в mo-файл.

poEdit — свободное программное обеспечение, распространяемое на условиях лицензии MIT.

Из других специализированных редакторов можно упомянуть KBabel (для среды KDE) и GTranslator (для GNOME).

Естественно, существует также режим PO для GNU Emacs. На данный момент в нём отсутствует инструмент для разрезания сообщений, для этого предлагается пользоваться функцией po-wrap, описанной в руководстве по GNUN. Обновление po-файла из репозитория

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

  • взять проект из репозитория с помощью команды git clone git://git.gnome.org/<имя_проекта>;
  • заменить имеющийся po-файл проекта своим, содержащим переведённые сообщения (в проекте этот файл обычно расположен в каталоге po и называется ru.po);
  • выполнить в каталоге проекта, содержащем po-файл команду intltool-update ru;

Теперь po-файл в проекте актуален, можно его допереводить.

Цикл разработки и перевода GNOME

Перевод приложений, не входящих в состав GNOME

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

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

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

Важные рекомендации

Несмотря на то, что переводимая программа и не входит в проект GNOME, переводчикам настоятельно советуется следовать следующим рекомендациям. Ведь для большинства пользователей нет разницы работают они с программой, официально являющейся частью проекта GNOME, или с программой, написанной сторонними разработчиками для GNOME. Для них гораздо важнее стилистическая стройность переводов пользовательского интерфейса и документации, чтобы к примеру «панель инструментов» везде называлась именно «панелью инструментов», а не «инструментальной панелью» или того хуже — «тулбаром».

rukovodstvo_perevodchika_gnome.txt · Последние изменения: 2016/04/29 12:28 — ymyasoedov

Инструменты страницы