Для переводчика
Программы PostgreSQL (сервер и клиент) могут выдавать свои сообщения на вашем любимом языке - если сообщения были переведены. Создание и поддержка переведенных наборов сообщений требует помощи людей, которые хорошо говорят на своем языке и хотят внести свой вклад в развитие PostgreSQL. Для этого совсем не обязательно быть программистом. В этом разделе объясняется, как помочь.
Требования
Мы не будем судить о ваших знаниях языка - этот раздел посвящен программным инструментам. Теоретически, нужен только текстовый редактор. Но это только в том маловероятном случае, если не захотите опробовать переведенные сообщения. При конфигурировании дерева исходных текстов обязательно используйте опцию --enable-nls. Это также проверит наличие библиотеки libintl и программы msgfmt, которые в любом случае понадобятся всем конечным пользователям. Чтобы опробовать свою работу, следуйте соответствующим частям инструкций по установке.
Если хотите начать новую работу по переводу или выполнить слияние каталогов сообщений (об этом позже), понадобятся программы xgettext и msgmerge, соответственно, в GNU-совместимой реализации. Позже мы постараемся сделать так, чтобы при использовании упакованного исходного дистрибутива xgettext не понадобился. (Если работаете с Git'ом, он все равно понадобится.) В настоящее время рекомендуется GNU Gettext 0.10.36 или более поздняя версия.
Ваша локальная реализация gettext должна поставлятьс я с собственной документацией. Часть ее, вероятно, будет продублирована в нижеследующей, но за дополнительными подробностями следует обратиться туда.
Концепции
Пары оригинальных (английских) сообщений и их (возможно) переведенных эквивалентов хранятся в каталогах сообщений, по одному для каждой программы (хотя связанные программы могут иметь общий каталог сообщений) и для каждого целевого языка. Существует два формата файлов для каталогов сообщений: Первый - это файл "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.
Создание и ведение каталогов сообщений
Итак, как создать "пустой" каталог сообщений? Во-первых, зайдите в каталог, содержащий программу, сообщения которой хотите перевести. Если там есть файл 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, которые находятся "в производстве". Т означает "шаблон"). Скопируйте этот файл в файл language.po
и отредактируйте его. Чтобы стало известно, что новый язык доступен, также отредактируйте файл nls.mk и добавьте код языка (или языка и страны) в строку, которая выглядит следующим образом:
AVAIL_LANGUAGES := de fr
(Конечно, могут появиться и другие языки).
По мере изменения базовой программы или библиотеки сообщения могут быть изменены или добавлены разработчиками программы. В этом случае не нужно начинать с нуля. Вместо этого выполните команду:
make update-po
которая создаст новый пустой файл каталога сообщений (файл pot, с которого начали) и объединить его с существующими PO-файлами. Если алгоритм слияния не уверен в конкретном сообщении, он пометит его как "нечеткое", как объяснялось выше. Новый PO-файл сохраняется с расширением .po.new.
Редактирование файлов PO
Файлы PO можно редактировать в обычном текстовом редакторе. Переводчик должен лишь изменить область между кавычками после директивы msgstr, добавить комментарии и изменить флаг fuzzy. Существует также режим PO для Emacs, который представляется довольно полезным.
Файлы PO не обязательно должны быть полностью заполнены. Программа автоматически вернется к исходной строке, если перевод отсутствует (или перевод пустой). Нет проблем с предоставлением неполных переводов для включения в дерево исходного текста; это дает возможность другим людям продолжить вашу работу. Тем не менее, рекомендуется уделять первоочередное внимание удалению нечетких записей после слияния. Напоминаем, что нечеткие записи не будут установлены; они служат только в качестве ссылки на то, что может быть правильным переводом.
Некоторые моменты, о которых следует помнить при редактировании переводов:
-
Убедитесь, что если оригинал заканчивается новой строкой, то и перевод тоже. Аналогично для табуляций и т. д.
-
Если оригинал представляет собой строку формата
printf
, то перевод также должен быть таким. Перевод также должен содержать те же спецификаторы формата в том же порядке. Иногда естественные правила языка делают это невозможным или, по крайней мере, неудобным. В этом случае можно изменить спецификаторы формата следующим образом:msgstr "Die Datei %2\$s hat %1\$u Zeichen."
Тогда первый заполнитель на самом деле будет использовать второй аргумент из списка.
Цифры$
должны следовать за%
сразу, перед любыми другими манипуляторами формата. (Эта возможность действительно существует в семействе функцийprintf
. За пределами интернационализации сообщений она практически не используется). -
Если ис ходная строка содержит лингвистическую ошибку, сообщите об этом (или исправьте ее самостоятельно в исходном тексте программы) и переведите нормально. Исправленная строка может быть добавлена после обновления исходников программы. Если оригинальная строка содержит фактическую ошибку, сообщите об этом (или исправьте ее самостоятельно) и не переводите ее. Вместо этого необходимо пометить строку комментарием в PO-файле.
-
Сохраняйте стиль и тон исходной строки. В частности, сообщения, которые не являются предложениями (
cannot open file %s
), вероятно, не должны начинаться с заглавной буквы (если ваш язык различает регистр букв) или заканчиваться точкой (если язык использует знаки препинания). Возможно, будет полезно прочитать раздел «Руководство по стилю сообщений об ошибках». -
Если не знаете, что означает сообщение, или если оно неоднозначно, спросите об этом в списке рассылки разработчиков. Есть шанс, что англоязычные конечные пользователи также не поймут его или сочтут двусмысленным, поэтому лучше улучшить сообщение.