LOCALE::PO4A::PO.3PM(1)

НАЗВАНИЕ
Locale::Po4a::Po: модуль манипуляции PO-файлами

КРАТКОЕ СОДЕРЖАНИЕ
    use Locale::Po4a::Po;
    my $pofile=Locale::Po4a::Po->new();

    # Прочитать PO-файл
    $pofile->read('file.po');

    # Добавить запись
    $pofile->push('msgid' => 'Hello', 'msgstr' => 'bonjour',
                  'flags' => "wrap", 'reference'=>'file.c:46');

    # Извлечь перевод
    $pofile->gettext("Hello"); # returns 'bonjour'

    # Записать обратно в файл
    $pofile->write('otherfile.po');

ОПИСАНИЕ
Locale::Po4a::Po — это модуль, который позволяет вам производить манипуляции с каталогами сообщений. Вы можете читать и писать из/в файл (с расширением, обычно, po), вы можете создавать новые записи на лету или запрашивать переводы строк.

Более всеобъемлющее описание того, что представляют из себя каталоги сообщений в PO-формате и как их использовать, можно найти в документации программы gettext, в частности на её info-странице (глава «PO Files»).

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

ПАРАМЕТРЫ ПРИНИМАЕМЫЕ ЭТИМ МОДУЛЕМ

--porefs тип
    Задаёт формат сносок в комментариях PO-файла. Аргумент тип может быть одним из: never — не выводить никаких сносок, noline — не выводить номера строк (точнее, все номера строк будут заменены на 1), counter — заменяет номера строк инкрементным счётчиком и full — включает полноценные сноски (по умолчанию: full).

--wrap-po no|newlines|число (по умолчанию: 76)
    Задаёт, как должны переносится строки в PO-файле. С помощью этого параметра можно выбрать одно из двух: или чтобы переносы в файлах были удобно расставлены для чтения людьми (хотя это и может привести к конфликтам в git), или чтобы файлы больше подходили для автоматической обработки (хотя это и снизит удобство чтения оных людьми).

    Исторически сложилось так, что gettext переносил строки в PO-файлах на 77-м столбце (по косметическим соображениям). Этот параметр определяет, как должен вести себя po4a в связи с этим. Если в нём указано число, po4a будет переносить строки в PO-файле после указанного столбца, а также после символов перевода строки в содержимом. Если указано newlines, то po4a будет разделять msgid и msgstr на строки только в местах перевода строк в самом их содержимом. Если же указано no, то po4a вообще не будет переносить строки в PO-файле. Строки комментариев со ссылками на местоположение строки в исходном документе всегда разбиваются на строки по усмотрению инструментов gettext, которые используются внутри po4a.

    Замечание: этот параметр ни как не влияет на то, как будут расставлены переносы строк внутри самих msgid и msgstr, т.е. на то, как переносы строк будут добавляться к их содержимому.

--msgid-bugs-address email@address
    Установить адрес для сообщений об ошибках в msgid. По умолчанию, созданные POT-файлы не имеют поля Report-Msgid-Bugs-To.

--copyright-holder строка
    Указать владельца авторских прав в заголовке POT файла. Значение по умолчанию: «Free Software Foundation, Inc.»

--package-name строка
    Указать имя пакета в заголовке POT-файла. Значение по умолчанию: «PACKAGE».

--package-version строка
    Указать версию пакета в заголовке POT-файла. Значение по умолчанию: «VERSION».

Функции, относящиеся ко всему каталогу сообщений

new()
    Создаёт новый каталог сообщений. Если указан аргумент, то это имя PO-файла, который будет загружен.

read($)
    Читает PO-файл (имя которого указано в качестве аргумента). Записи, уже присутствующие в каталоге, не удаляются; новые записи добавляются в конец каталога.

write($)
    Записывает текущий каталог в указанный файл.

write_if_needed($$)
    Аналогично write(), но если PO или POT-файл уже существует, то объект будет записан во временный файл, который будет сравнён с существующим, дабы проверить, требуется ли обновление (это позволяет избежать изменения POT-файла только для обновления сносок на строки в исходных документах или поля POT-Creation-Date).

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

    Эта функция анализирует переданную ей строку, преобразуя её в функцию Perl, вызывает для неё eval и фильтрует каталог сообщений, оставляя только те поля, для которых функция возвращает true.

    Иногда я люблю Perl ;)

Функции для использования каталога сообщений для перевода

gettext($%)
    Запросить перевод строки, указанной в качестве аргумента, в текущем каталоге. Если строка не найдена, функция возвращает исходную (непереведённую) строку.

    После переводимой строки вы можете также передать хеш с дополнительными аргументами. Допустимые ключи:

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

    wrapcol
        количество символов в строке, после которых должен выполняться автоматический перенос текста на новую строку (по умолчанию: 76).

stats_get()
    Возвращает статистику о коэффициенте попадания gettext (т.е. доли запросов, для которых был найден перевод строки) с момента последнего вызова stats_clear(). Обратите внимание, что это не та статистика, которую выводит "msgfmt --statistic". Эта функция возвращает статистику недавнего использования PO-файла, в то с время как msgfmt выводит информацию о количестве переводов и строк в самом файле. Пример использования:

        [некоторая работа с PO-файлом для перевода чего-нибудь]

        ($percent,$hit,$queries) = $pofile->stats_get();
        print "На данный момент мы нашли переводы для $percent\% ($hit из $queries) строк.\n";

stats_clear()
    Сбрасывает статистику успешности запросов gettext.

Функции для наполнения каталога сообщений

push(%)
    Добавить новую запись в конец текущего каталога. Принимает хеш-таблицу. Допустимые ключи:

    msgid
        строка на исходном языке.

    msgstr
        перевод.

    reference
        указание, где была найдена эта строка. Например: file.c:46 (строка 46 из файла «file.c»). Может быть списком (разделённым пробелами) в случае, если строка встречается несколько раз.

    comment
        добавленный вручную (переводчиком) комментарий. Формат может быть произвольным.

    automatic
        комментарий, добавленный программой извлечения строк. Для более подробной информации см. описание параметра --add-comments для программы xgettext.

    flags
        список флагов, разделённых пробелами, которые были заданы для данной записи .

        Допустимы следующие флаги: c-text, python-text, lisp-text, elisp-text, librep-text, smalltalk-text, java-text, awk-text, object-pascal-text, ycp-text, tcl-text, wrap, no-wrap и fuzzy.

        См. документацию gettext для описания их значений.

    type
        в основном это параметр для внутреннего использования: он используется при геттекстизации документов. Идея здесь состоит в том, чтобы разобрать и исходный документ, и перевод в PO-объект и сшить их, используя msgid одного в качестве msgid, а msgid второго в качестве msgstr. Чтобы удостовериться, что всё корректно, каждому msgid в PO-объектах присваивается тип, основываясь на структуре файла из которого они были извлечены (например, «chapt», «sect1», «p» и т.п. в DocBook). Если типы строк не совпадают, то это означает, что оба файла имеют разную структуру, и процесс завершается с ошибкой.

        Также эта информация записывается в виде автоматического комментария в PO-файл, поскольку это предоставляет переводчикам некоторый дополнительный контекст для строк, которые они переводят.

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

        Эта информация записывается в PO-файл с помощью флагов wrap или no-wrap.

    wrapcol
        ignored; the key is kept for backward computability.

Прочие функции

count_entries()
    Возвращает количество записей в каталоге (не считая заголовка).

count_entries_doc()
    Возвращает количество записей в документе. Если строка встречается в документе несколько раз, она будет учитываться несколько раз.

msgid($)
    Возвращает msgid записи с указанным порядковым номером.

msgid_doc($)
    Возвращает msgid с заданной порядковой позицией в документе.

type_doc($)
    Возвращает тип msgid с заданной позицией в документе. Вероятно, это полезно только для геттекстизации, и это значение хранится отдельно от {$msgid}{'type'}, поскольку этот тип может быть позднее перезаписан в случае, если строка с таким же $msgid встретится в мастер-докумете позднее.

get_charset()
    Возвращает кодировку, указанную в PO-заголовке. Если кодировка не установлена, возвращается "UTF-8".

АВТОРЫ
 Денис Барбье (Denis Barbier) <barbier@linuxfr.org>
 Мартин Кенсон (Martin Quinson) (mquinson#debian.org)