Scroll to navigation

PO4A(1p) Инструменты Po4a PO4A(1p)

НАЗВАНИЕ

po4a - одновременное обновление PO файлов и переведённой документации

СИНТАКСИС

po4a [options] config_file

ОПИСАНИЕ

Целью проекта po4a (PO везде или для всего) является облегчение процесса перевода (и что более важно - поддержка переводов), использующего инструменты gettext там, где переводимые файлы не выглядят как документация.

Программа po4a очень полезна, если вы хотите избежать вызова po4a-gettextize(1), po4a-updatepo(1), и po4a-translate(1) в достаточно сложных файлах сборки (Makefiles), когда слишком много файлов для перевода, много различных форматов или необходимо определить разные параметры для разных документов.

Оглавление

Этот документ структурирован следующим образом:

ОПИСАНИЕ

ВВЕДЕНИЕ

СИНТАКСИС ФАЙЛА НАСТРОЙКИ

Определение шаблона языков

Определение путей к входным файлам переводчика

Автоопределение путей и языков

Определение документов для перевода

Определение параметров для модулей

Определение ссылок (aliases)

Раздельный режим

ПАРАМЕТРЫ

EXAMPLE

НЕДОСТАТКИ

СМОТРИ ТАКЖЕ

АВТОРЫ

АВТОРСКИЕ ПРАВА И ЛИЦЕНЗИИ

ВВЕДЕНИЕ

Программа po4a предназначена как для обновления PO файлов (для синхронизации их с оригинальными документами), так и для обновления переведённых документов (для синхронизации их с PO файлами). Главная цель состоит в том, чтобы использование программы po4a было насколько возможно простым, благодаря тому, что нет необходимости запоминать параметры командной строки.

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

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

Работу с данными можно описать следующим образом. Любые изменения главного документа влияют на PO файлы, и все изменения PO файлов (ручные или вызванные предыдущими шагами) будут влиять на переведённый документ.

 главный документ --> PO файлы --> переводы

Поток данных нельзя обратить с помощью данного инструмента, поэтому все изменения в переводах перезаписываются содержимым PO файлов. Данный инструмент нельзя использовать для преобразования существующего перевода в систему po4a. Для решения этих задач смотрите po4a-gettextize(1).

СИНТАКСИС ФАЙЛА НАСТРОЙКИ

(Обязательным) Параметром является путь к файлу настроек для использования. Его синтаксис прост и максимально близок к синтаксису файлу настроек используемого в проекте intl-tools.

Комментарии в этом файле помечаются символом '#'. Помеченный таким образом текст, до конца строки, является комментарием. Строка может быть продолжена с помощью перехода на новую строку. Все, не пустые, строки должны начинаться с команды [], следующей за её аргументами (звучит сложно, но на самом деле довольно просто, я надеюсь;)

Определение шаблона языков

Примечание: рекомендуется использовать [po_directory], а не [po4a_langs] и [po4a_paths]. См. раздел Autodetection of the paths and languages (автоопределение путей и языков) ниже.

Эта дополнительная команда может упростить весь файл настройки и сделать его более масштабируемым. Вам необходимо указать список языков, на которые вы хотите перевести документы. Это довольно просто:

 [po4a_langs] fr de

Это позволит вам расширить $lang на все определённые языки в оставшейся части файла настройки.

Определение путей к входным файлам переводчика

Примечание: рекомендуется использовать [po_directory], а не [po4a_langs] и [po4a_paths]. См. раздел Autodetection of the paths and languages (автоопределение путей и языков) ниже.

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

 [po4a_paths] doc/l10n/project.doc.pot \
              fr:doc/l10n/fr.po de:doc/l10n/de.po

Вызывается команда [po4a_paths]. Первым аргументом является путь к используемому POT файлу. Следующие аргументы носят говорящие сами за себя названия:

    <lang>:<path to the PO file for this lang>

Если вы определили шаблон языков, то вы можете переписать строку выше следующим образом:

 [po4a_paths] doc/l10n/project.doc.pot $lang:doc/l10n/$lang.po

You can also use $master to refer to the document filename. In this case, po4a will use a split mode: one POT and one PO (for each language) will be created for each document specified in the po4a configuration file. See the Split mode section.

 [po4a_paths] doc/$master/$master.pot $lang:doc/$master/$lang.po

Автоопределение путей и языков

Можно использовать другую команду для того, чтобы задать имя каталога, в котором находятся PO и POT файлы. При её использовании po4a будет обнаруживать POT файлы только в соответствии с шаблоном *.pot из указанного каталога. po4a также будет использовать список *.po файлов для определения списка языков (путем удаления расширения). Эти языки будут использованы для замены переменной $lang в оставшейся части конфигурационного файла.

Эта команда не должна использоваться вместе с командами [po4a_langs] или [po4a_paths].

При использовании этой команды, вы должны создать пустой POT файл при первом вызове po4a, чтобы указать имя POT файла.

 [po_directory] po4a/po/

Определение документов для перевода

Теперь вы должны указать какие документы переведены, их формат, и местоположение переводов. Это можно сделать следующим образом:

 [type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \
              de:doc/de/mein_kram.sgml
 [type: pod] script fr:doc/fr/script.1 de:doc/de/script.1 \
             add_fr:doc/l10n/script.fr.add

Это должно быть понятно само по себе. Заметим, что во втором случае doc/l10n/script.fr.add является дополнением, предназначенным для добавления к французской версии этого документа. Пожалуйста, прочитайте po4a(7), чтобы узнать подробней о дополнениях.

Более детально, формат имеет вид:

 [type: <format>] <master_doc> (<lang>:<localized_doc>)* \
                  (add_<lang>:<modifier>*<addendum_path>)*

Если модификатор отсутствует, addendum_path является путём к дополнению. Модификаторами являются

?
Если этот файл не существует, то включить addendum_path , в противном случае ничего не делать.
@
addendum_path is not a regular addendum but a file containing a list of addenda, one by line. Each addendum may be preceded by modifiers.
!
addendum_path отбрасывается, он не загружается и не будет загружаться никакими будущими дополнениями.

Если вы определили шаблон языков, то вы можете переписать строку выше следующим образом:

 [type: pod] script $lang:doc/$lang/script.1 \
             add_fr:doc/l10n/script.fr.add

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

 [type: pod] script $lang:doc/$lang/script.1 \
             add_$lang:doc/l10n/script.$lang.add

Определение параметров для модулей

po4a принимает параметры, которые будут переданы в модуль. Эти, специфичные для модуля, параметры задаются с помощью переключателя .

If you need a specific option for one of the documents you want to translate, you can also specify it in the configuration file. Options are introduced by the opt keyword. The argument of the opt keyword must be quoted with double quotes if it contains a space (e.g. if you specify multiple options, or an option with an argument). You can also specify options that will only apply to a specific language by using the opt_lang keyword.

Ниже приведен пример: [type:man] t-05-config/test02_man.1 $lang:tmp/test02_man.$lang.1 \ opt:"-k 75" opt_it:"-L UTF-8" opt_fr:-v

Аргументы могут содержать пробелы, если вы используете одинарные или двойные кавычки: [po4a_alias:man] man opt:"-o \"mdoc=NAME,SEE ALSO\" -k 20"

Если вы хотите использовать одни и те же параметры для нескольких документов, можете использовать псевдоним (см. раздел Specifying aliases ниже по тексту).

Вы также можете установить параметры для всех документов, указанных в файле настроек: [options] opt:"..." opt_fr:"..."

Определение ссылок (aliases)

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

 [po4a_alias:test] man opt:"-k 21" opt_es:"-o debug=splitargs"

Таким образом определяется псевдоним модуля с именем test, основанный на модуле man, с ключём -k 21 - для всех языков и с ключём -o debug=splitargs - только для перевода на Испанский.

This module alias can then be used like a regular module:

 [type:test] t-05-config/test02_man.1 $lang:tmp/test02_man.$lang.1 \
            opt_it:"-L UTF-8" opt_fr:-v

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

Раздельный режим

Раздельный режим используется при использовании $master в строке [po4a_paths].

В случае применения раздельного режима используются большой временный POT и большие временные PO файлы. Это позволяет распределить переводы во все PO файлы.

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

If there are name conflicts because several files have the same filename, the name of the master file can be specified by adding a "master:file="name option:

 [po4a_langs] de fr ja
 [po4a_paths] l10n/po/$master.pot $lang:l10n/po/$master.$lang.po
 [type: xml] foo/gui.xml $lang:foo/gui.$lang.xml master:file=foo-gui
 [type: xml] bar/gui.xml $lang:bar/gui.$lang.xml master:file=bar-gui

ПАРАМЕТРЫ

-k, --keep
Minimal threshold for translation percentage to keep (i.e. write) the resulting file (default: 80). I.e. by default, files have to be translated at least at 80% to get written.
-h, --help
Отобразить короткую справку.
-M, --master-charset
Кодировка файла, содержащего переводимый документ. Обратите внимание на то, что все основные документы должны использовать одну и ту же кодировку, пока. Это известное ограничение, и мы работаем над его устранением.
-L, --localized-charset
Кодировка файла, содержащего переведённый документ. Обратите внимание на то, что все переведённые документы должны иметь одну и ту же кодировку, пока. Это известное ограничение, и мы работаем над его устранением.
-A, --addendum-charset
Кодировка дополнение. Обратите внимание, что все дополнения должны иметь одну и ту же кодировку.
-V, --version
Отобразить версию и завершить работу скрипта.
-v, --verbose
Увеличить количество выводимой пояснительной информации.
-q, --quiet
Уменьшить количество выводимой пояснительной информации.
-d, --debug
Вывод отладочной информации.
-o, --option
Дополнительный параметр(ы) для перехода в формат плагина. Определяйте каждый параметр в формате 'name=value'. См. документацию на каждый плагин для получения дополнительной информации о возможных параметрах и их значениях.
-f, --force
Всегда создавать POT и PO файлы, даже если po4a считает, что это не требуется.

По умолчанию ведёт (когда параметр --force не установлен) себя следующим образом:

Если POT файл уже существует, он создается повторно, если основной документ или файл настроек был недавно изменен. POT файл так же записывается во временный документ и po4a подтверждает, что изменения действительно необходимы.

Кроме того, перевод обновляется (regenerated) только если его главный документ, PO файл, один из его дополнений или файл настроек были недавно обновлены. Чтобы избежать попыток обновления переводов, которые не преодолели порогового значения (см. --keep), можно создать файл с расширением .po4a-stamp (см. --stamp).

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

PO файлы всегда обновляются из POT файлов с помощью msgmerge -U.

--stamp
Указывает po4a создать отпечаток файла, если перевод не создаётся, поскольку он не превысил порогового значения. Отпечаток файла будет называться также, как и переводимый документ, с расширением .po4a-stamp.

Примечание: Параметр только активирует создание файлов .po4a-stamp. Файлы отпечатков используются всегда если они существуют, и удаляются с помощью --rm-translations или когда файл полностью переведён.

--no-translations
Не регенерировать переведённые документы, только обновлять POT и PO файлы.
--no-update
Do not change the POT and PO files, only the translation may be updated.
--keep-translations
Keeps the existing translation files even if the translation doesn't meet the threshold specified by --keep. This option does not create new translation files with few content, but it will save existing translations which decay because of changes to the master files.

WARNING: This flag changes the po4a behavior in a rather drastic way: your translated files will not get updated at all until the translation improves. Only use this flag if you prefer shipping an outdated translated documentation rather than only shipping an accurate untranslated documentation.

--rm-translations
Удалить переведённые файлы (подразумевается --no-translations).
--no-backups
This flag does nothing since 0.41, and may be removed in later releases.
--rm-backups
This flag does nothing since 0.41, and may be removed in later releases.
--translate-only translated-file
Translate only the specified file. It may be useful to speed up processing if a configuration file contains a lot of files. Note that this option does not update PO and POT files. This option can be used multiple times.
--variable var=value
Определить переменную, которая будет использована в файле настроек po4a. Каждое появление $(var) будет замещено на значение value. Данный параметр можно использовать несколько раз.
--srcdir SRCDIR
Указывает базовый каталог для всех входных документов, перечисленных в файле настроек po4a.
--destdir DESTDIR
Указывает базовый каталог для всех выходных документов, перечисленных в файле настроек po4a.

OPTIONS WHICH MODIFY POT HEADER

--porefs type[,wrap|nowrap]
Specify the reference format. Argument type can be one of never to not produce any reference, file to only specify the file without the line number, counter to replace line number by an increasing counter, and full to include complete references (default: full).

Argument can be followed by a comma and either wrap or nowrap keyword. References are written by default on a single line. The wrap option wraps references on several lines, to mimic gettext tools (xgettext and msgmerge). This option will become the default in a future release, because it is more sensible. The nowrap option is available so that users who want to keep the old behavior can do so.

--msgid-bugs-address email@address
Установить адрес для посылки сообщений о msgid ошибках. По умолчанию, созданные POT файлы не имеют поля Report-Msgid-Bugs-To.
--copyright-holder string
Указать владельца авторских прав в заголовке POT файла. Значение по умолчанию "Free Software Foundation, Inc."
--package-name string
Указать имя пакета в заголовке POT файла. Значение по умолчанию "PACKAGE".
--package-version string
Указать версию пакета в заголовке POT файла. Значение по умолчанию "VERSION".

OPTIONS TO MODIFY PO FILES

--msgmerge-opt options
Дополнительные настройки для msgmerge(1).

Примечание: $lang будет распространён на текущий язык.

--no-previous
Данный параметр удаляет параметр --previous из настроек msgmerge. Это позволяет использовать версии gettext более ранние чем 0.16.
--previous
Данный параметр добавляет --previous к настройкам msgmerge. А это требует gettext версии 0.16 или выше, и активирован по умолчанию.

EXAMPLE

Let's assume you maintain a program named foo which has a man page man/foo.1 which naturally is maintained in English only. Now you as the upstream or downstream maintainer want to create and maintain the translation. First you need to create the POT file necessary to send to translators using po4a-gettextize(1).

So for our case we would call

 cd man && po4a-gettextize -f man -m foo.1 -p foo.pot

You would then send this file to the appropriate language lists or offer it for download somewhere on your website.

Now let's assume you received three translations before your next release: de.po (including an addendum de.add), sv.po and pt.po. Since you don't want to change your Makefile(s) whenever a new translation arrives you can use po4a with an appropriate configuration file in your Makefile. Let's call it po4a.cfg. In our example it would look like the following:

 [po_directory] man/po4a/po/

 [type: man] man/foo.1 $lang:man/translated/$lang/foo.1 \
            add_$lang:?man/po4a/add_$lang/$lang.add opt:"-k 80"

In this example we assume that your generated man pages (and all PO and addenda files) should be stored in man/translated/$lang/ (respectively in man/po4a/po/ and man/po4a/add_$lang/) below the current directory. In our example the man/po4a/po/ directory would include de.po, pt.po and sv.po, and the man/po4a/add_de/ directory would include de.add.

Note the use of the modifier ? as only the German translation (de.po) is accompanied by an addendum.

To actually build the translated man pages you would then (once!) add the following line in the build target of the appropriate Makefile:

        po4a po4a.cfg

Once this is set up you don't need to touch the Makefile when a new translation arrives, i.e. if the French team sends you fr.po and fr.add then you simply drop them respectively in man/po4a/po/ and man/po4a/add_fr/ and the next time the program is built the French translation is automatically build as well in man/translated/fr/.

Note that you still need an appropriate target to install localized manual pages with English ones.

Finally if you do not store generated files into your version control system, you will need a line in your clean target as well: -rm -rf man/translated

НЕДОСТАТКИ

Дублирует некоторый код в программах po4a-*.

Заплатки (patch) приветствуются ;)

СМОТРИ ТАКЖЕ

po4a-build(1), po4a-gettextize(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a-build.conf(5), po4a(7)

АВТОРЫ

 Denis Barbier <barbier@linuxfr.org>
 Nicolas François <nicolas.francois@centraliens.net>
 Martin Quinson (mquinson#debian.org)

АВТОРСКИЕ ПРАВА И ЛИЦЕНЗИИ

Copyright 2002-2012 by SPI, inc.

This program is free software; you may redistribute it and/or modify it under the terms of GPL (see the COPYING file).

2018-08-07 Инструменты Po4a