НАЗВАНИЕ
- Provided by: po4a (Version: 0.66-1)
- Report a bug
po4a-gettextize -f формат -m мастер_документ.doc [-l XX.doc] -p XX.po
(XX.po является выходным файлом, всё остальное является входными параметрами)
po4a (PO for anything, PO для всего) упрощает поддержку переводов документации, используя обычные инструменты gettext. Основная идея po4a состоит в том, что оно отделяет перевод содержимого от структуры документа. Пошаговое вводное руководство по работе с данным проектом можно посмотреть на странице po4a(7).
Сценарий po4a-gettextize отвечает за преобразование файлов документации в PO-файлы. Он понадобится вам только для того, чтобы начать ваш проект перевода с помощью po4a, в дальнейшем вам не нужно будет его использовать.
Если вы только начинаете перевод, po4a-gettextize извлечёт переводимые строки из документации и запишет их в POT-файл. А если вы зададите уже переведённый документ с помощью флага -l, po4a-gettextize попробует использовать этот перевод и создавать PO-файл. Этот процесс всё ещё очень нудный и его приходится производить вручную, как описано в разделе «Преобразование уже существующего перевода в po4a» ниже.
Если мастер-документ содержит не-ASCII символы, то созданный PO-файл будет в кодировке UTF-8. В противном случае (если мастер-документ полностью в кодировке ASCII), созданный PO-файл будет использовать кодировку переводимого входного документа или UTF-8, если переведённый документ не задан.
po4a-gettextize попытается извлечь содержимое заданного переведённого файла и использовать его в качестве msgstr в созданном PO-файле. Имейте в виду, что этот процесс крайне хрупкий: предполагается что N-ая строка переведённого файла является переводом N-ой строки исходного. Естественно, это не будет работать, если у обоих файлов не абсолютно идентичная структура.
Внутренне, каждый парсер po4a возвращает синтаксический тип для каждой извлечённой строки. Это и помогает определить рассинхрон файлов во время геттекстизации. Например, если у файлов будет следующая структура, очень маловероятно, что 4-я строка в переводе (типа «глава») является переводом 4-й строки в оригинале (типа «параграф»). Скорее в оригинал был добавлен новый параграф или два параграфа оригинала были объединены в переводе.
Оригинал Перевод
глава глава
параграф параграф
параграф параграф
параграф глава
глава параграф
параграф параграф
po4a-gettextize будет выдавать подробные диагностические сообщения о любых обнаруженных рассинхронизациях в структуре файлов. Кода такое произойдёт, вам придётся вручную отредактировать эти файлы (скорей всего, это потребует хоть некоторого минимального знания языка на который переведены эти документы). Вам придётся добавлять какие-то суррогатные параграфы или удалить часть содержимого в одном из документов (или в обоих), дабы исправить найденные несоответствия так, чтобы структура обоих документов в совершенстве совпадала. Несколько трюков, как это сделать приведены в следующем разделе.
Даже когда документ успешно обработан, все еще возможны необнаруженные несоответствия и неявные ошибки. Поэтому любой перевод, автоматически ассоциированный po4a-gettextize, помечается как fuzzy, чтобы потребовать ручной проверки человеком. Необходимо проверить, что каждый полученный msgstr является переводом соответствующего msgid, а не строкой до или после него.
Как видите, ключевым моментом здесь является точное совпадение структуры в переведенном документе и в оригинале. Лучше всего выполнять gettextization на той версии master.doc, которая использовалась для перевода, и обновлять PO-файл по последнему мастер-файлу только после успешной gettextization.
Если вам повезёт и структура обоих документов идеально совпадает, то создание корректного PO-файла займёт всего несколько секунд. В противном случае вы вскоре поймёте, почему у этого процесса такое уродливое название :). Но помните, что эта грязная работёнка — это та цена, которую придётся заплатить за то, чтобы пользоваться удобствами po4a в дальнейшем. Как только вы завершите процесс преобразования, синхронизация между мастер-документом и переводами станет полностью автоматической.
Даже когда что-то идёт не так, зачастую сделать геттекстизацию всё равно быстрее, чем переводить всё заново. Например, я смог геттекстизировать существующий французский перевод всей документации Perl всего за один день, даже несмотря на то, что структура многих документов была рассинхронизирована. И это были более чем два мегабайта исходного текста (2 миллиона символов): новый перевод с нуля занял бы несколько месяцев.
Gettextization прекращается, как только обнаруживается десинхронизация. Теоретически, вероятно, должна быть возможность повторной синхронизации gettextization в более поздних документах, используя, например, тот же алгоритм, что используется в утилите diff(1). Но ручное вмешательство все равно будет обязательным для ручного сопоставления элементов, которые не могут быть сопоставлены автоматически, что объясняет, почему автоматическая ресинхронизация не реализована (пока?).
Когда это случается, вся фишка сводится к тому, чтобы совместить выравнивание этих проклятых файловых структур, редактируя их вручную. po4a-gettextize довольно подробно описывает, что пошло не так. Он выдаст вам строки, которые не совпадают, их местоположение в документах и тип каждой из них. Кроме того, созданный к моменту сбоя PO-файл будет сбрасываться в gettextization.failed.po.
Вот еще несколько приемов, которые помогут вам в этом утомительном процессе:
Аналогично, два абзаца могут слиться в один в POD, когда разделяющая их строка содержит пробелы или когда между =item и содержимым элемента нет пустой строки.
Эта печальная ситуация возникает, когда один и тот же абзац повторяется в документе несколько раз. В этом случае новая запись в PO-файле не создаётся, а к уже существующей добавляется новая сноска.
Итак, предыдущая ситуация возникает, когда два похожих, но разных абзаца переводятся совершенно одинаково. Это, очевидно, приведет к удалению одного абзаца из перевода. Чтобы устранить проблему, достаточно слегка изменить один из переводов в документе. Вы также можете предпочесть убить второй абзац в оригинальном документе.
Напротив, если один и тот же абзац встречается дважды в оригинальном документе, но переводится не в точности одинаково в разных случаях, у вас создаётся впечатление, будто один из параграфов оригинала просто пропадает. Чтобы исправить проблему, просто скопируйте выберете лучший вариант перевода и скопируйте его вместо второго в переведённом документе.
Например, первый po4a-updatepo французского перевода документации Perl (файл PO размером 5,5 МБ) занял около 48 часов (да, два дня), в то время как последующие занимают лишь десятки секунд.
po4a(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a(7).
Denis Barbier <barbier@linuxfr.org> Nicolas Francois <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
Copyright 2002-2020 by SPI, inc.
Данная программа является свободным программным обеспечением; вы можете распространять и/или изменять её на условиях Универсальной общественной лицензии (GPL) GNU (см. файл COPYING).