55.1. Для переводчика#

55.1. Для переводчика

55.1. Для переводчика

Tantor SE программы (сервер и клиент) могут выводить свои сообщения на вашем любимом языке — если сообщения были переведены. Создание и поддержка переведенных наборов сообщений требуют помощи людей, которые хорошо владеют своим родным языком и хотят внести свой вклад в усилия Tantor SE. Вам совсем не обязательно быть программистом для этого. В этом разделе объясняется, как помочь.

55.1.1. Требования

Мы не будем судить ваши языковые навыки — эта секция посвящена программным инструментам. Теоретически, вам нужен только текстовый редактор. Но это только в том случае, если вы не хотите тестировать ваши переведенные сообщения. При настройке исходного кода, убедитесь, что вы используете опцию --enable-nls. Это также проверит наличие библиотеки libintl и программы msgfmt, которые все конечные пользователи все равно будут нуждаться. Чтобы протестировать свою работу, следуйте соответствующим частям инструкций по установке.

Если вы хотите запустить новый перевод или выполнить объединение каталогов сообщений (описано позже), вам понадобятся программы xgettext и msgmerge соответственно, в совместимой с GNU реализации. Позже мы постараемся организовать так, чтобы вам не понадобился xgettext, если вы используете упакованный исходный дистрибутив. (Если вы работаете из Git, вам все равно понадобится). В настоящее время рекомендуется использовать GNU Gettext 0.10.36 или более позднюю версию.

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

55.1.2. Концепции

Пары оригинальных (английских) сообщений и их (возможно) переведенных эквивалентов хранятся в каталогах сообщений, по одному для каждой программы (хотя связанные программы могут использовать общий каталог сообщений) и для каждого целевого языка. Существует два формата файлов для каталогов сообщений: первый - это файл PO (для Portable Object), который является обычным текстовым файлом с особым синтаксисом, который редактируют переводчики. Второй - это файл MO (для Machine Object), который является двоичным файлом, сгенерированным из соответствующего файла PO и используется во время работы интернационализованной программы. Переводчики не работают с файлами MO; на самом деле, почти никто не работает.

Расширение файла каталога сообщений, как неудивительно, может быть либо .po, либо .mo. Базовое имя - это либо имя программы, с которой он связан, либо язык файла, в зависимости от ситуации. Это немного запутанно. Примеры: psql.po (файл PO для psql) или fr.mo (файл MO на французском языке).

Формат файла PO файлов иллюстрирован здесь:

# comment

msgid "original string"
msgstr "translated string"

msgid "more original"
msgstr "another translated"
"string can be broken up like this"

...

msgid строки извлекаются из исходного кода программы. (Они не обязательно должны быть, но это наиболее распространенный способ). msgstr строки изначально пусты и заполняются полезными строками переводчиком. Строки могут содержать символы экранирования в стиле C и могут продолжаться на следующих строках, как показано. (Следующая строка должна начинаться с начала строки).

Символ # вводит комментарий. Если сразу после символа # следует пробел, то это комментарий, поддерживаемый переводчиком. Также могут быть автоматические комментарии, которые имеют непробельный символ сразу после #. Они поддерживаются различными инструментами, работающими с файлами PO, и предназначены для помощи переводчику.

#. automatic comment
#: filename.c:1023
#, flags, flags

Стиль комментариев #. извлекается из исходного файла, где используется сообщение. Возможно, программист вставил информацию для переводчика, например, ожидаемое выравнивание. Комментарии #: указывают точные места, где используется сообщение в исходном коде. Переводчику не обязательно смотреть на исходный код программы, но он может это сделать, если есть сомнения в правильном переводе. Комментарии # содержат флаги, которые описывают сообщение каким-то образом. В настоящее время существуют два флага: fuzzy устанавливается, если сообщение возможно устарело из-за изменений в исходном коде программы. Переводчик может проверить это и, возможно, удалить флаг fuzzy. Обратите внимание, что нечеткие сообщения не предоставляются конечному пользователю. Другой флаг - c-format, который указывает, что сообщение является шаблоном формата в стиле printf. Это означает, что перевод также должен быть строкой формата с тем же количеством и типом заполнителей. Существуют инструменты, которые могут проверить это, используя флаг c-format.

55.1.3. Создание и поддержка каталогов сообщений

Хорошо, как создать пустой каталог сообщений? Сначала перейдите в каталог, содержащий программу, сообщения которой вы хотите перевести. Если есть файл nls.mk, значит эта программа была подготовлена для перевода.

Если уже есть некоторые файлы .po, значит, кто-то уже выполнил некоторую работу по переводу. Файлы названы language.po, где language - это двухбуквенный код языка ISO 639-1 (в нижнем регистре), например, fr.po для французского языка. Если действительно есть необходимость в нескольких вариантах перевода на один и тот же язык, то файлы также могут иметь название language_region.po, где region - это двухбуквенный код страны ISO 3166-1 (в верхнем регистре), например, pt_BR.po для португальского языка в Бразилии. Если вы нашли нужный вам язык, вы можете приступить к работе с этим файлом.

Если вам нужно начать новое усилие по переводу, то сначала выполните команду:

make init-po

Это создаст файл progname.pot. (.pot для отличия от файлов PO, которые находятся в производстве. Буква T означает шаблон). Скопируйте этот файл в language.po и отредактируйте его. Чтобы указать, что новый язык доступен, также отредактируйте файл nls.mk и добавьте код языка (или языка и страны) в строку, которая выглядит так:

AVAIL_LANGUAGES := de fr

(Конечно, могут быть и другие языки).

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

make update-po

который создаст новый пустой файл каталога сообщений (файл pot, с которым вы начали) и объединит его с существующими файлами PO. Если алгоритм слияния не уверен в отношении конкретного сообщения, он помечает его как fuzzy, как объяснено выше. Новый файл PO сохраняется с расширением .po.new.

55.1.4. Редактирование файлов PO

Файлы PO могут быть отредактированы с помощью обычного текстового редактора. Переводчик должен изменять только область между кавычками после директивы msgstr, добавлять комментарии и изменять флаг нечеткости. Есть (как неудивительно) режим PO для Emacs, который я нахожу довольно полезным.

Файлы PO не обязательно заполнять полностью. Программное обеспечение автоматически вернется к исходной строке, если нет доступного перевода (или пустого перевода). Нет проблемы представить неполные переводы для включения в исходное дерево; это дает возможность другим людям продолжить вашу работу. Однако рекомендуется приоритетно удалять нечеткие записи после слияния. Помните, что нечеткие записи не будут установлены; они служат только в качестве справки для того, что может быть правильным переводом.

Вот несколько вещей, которые следует учитывать при редактировании переводов:

  • Убедитесь, что если исходный текст заканчивается символом перехода строки, то и перевод тоже заканчивается таким же символом. То же самое относится к символам табуляции и т.д.

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

    msgstr "Die Datei %2$s hat %1$u Zeichen."
    

    Затем первый заполнитель будет использовать второй аргумент из списка. Тег digits$ должен следовать сразу после символа %, перед любыми другими манипуляторами формата. (Эта функция действительно существует в семействе функций printf. Возможно, вы раньше не слышали о ней, потому что она мало используется за пределами интернационализации сообщений).

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

  • Сохраняйте стиль и тональность исходной строки. В частности, сообщения, которые не являются предложениями (cannot open file %s), вероятно, не должны начинаться с заглавной буквы (если ваш язык различает регистр букв) или заканчиваться точкой (если ваш язык использует знаки препинания). Может помочь прочитать Раздел 54.3.

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