
        *****************************************************
        *           GENERATED FILE, DO NOT EDIT             *
        * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
        *****************************************************

This file was generated by po4a(7). Do not store it (in VCS, for example),
but store the PO file used as source file by po4a-translate.

In fact, consider this as a binary, and the PO file as a regular .c file:
If the PO get lost, keeping this translation up-to-date will be harder.

=encoding UTF-8

=head1 НАЗВАНИЕ

po4a-gettextize - преобразует исходный файл (и его перевод) в PO-файл

=head1 КРАТКОЕ СОДЕРЖАНИЕ

B<po4a-gettextize> B<-f> I<формат> B<-m> I<мастер_документ.doc> B<-l> I<XX.doc> B<-p> I<XX.po>

(I<XX.po> является выходным файлом, все остальные являются входными параметрами)

=head1 ОПИСАНИЕ

po4a (PO for anything, PO для всего) упрощает поддержку переводов документации, используя обычные инструменты gettext. Основная идея po4a состоит в том, что оно отделяет перевод содержимого от структуры документа. Пошаговое вводное руководство по работе с данным проектом можно посмотреть на странице L<po4a(7)>.

Скрипт B<po4a-gettextize> поможет вам преобразовать уже существующие переводы для использования их в рабочем процессе, основанном на po4a. Это необходимо сделать только один раз, чтобы во время интеграции po4a уже проделанная работа по переводу не пропала впустую; это не нужно будет делать регулярно при работе над вашим проектом. Этот нудный процесс описан во всех подробностях в главе «Преобразование уже существующего перевода в po4a» ниже.

Вы должны задать как мастер-файл (т.е. исходный документ на английском), так и уже существующий переведённый файл (т.е. предыдущая попытка перевода, выполненная без использования po4a). Если вы задали больше одного мастер-файла или файла с переводом, то они будут использованы последовательно, но учтите, что, скорей всего, проще будет геттекстизировать каждую страницу или главу отдельно, а затем слить их вместе в один PO-файл с помощью B<msgmerge>. Но это на ваше усмотрение.

Если мастер-документ содержит не-ASCII символы, то созданный PO-файл будет в кодировке UTF-8. В противном случае, если мастер-документ полностью в кодировке ASCII, то созданный PO-файл будет использовать кодировку переводимого входного документа.

=head1 ПАРАМЕТРЫ

=over 4

=item B<-f>, B<--format>

Формат документации которой вы хотите обработать. Используйте параметр B<--help-format>, чтобы просмотреть список доступных форматов.

=item B<-m>, B<--master>

Файл содержащий мастер-документ для перевода. Вы можете использовать этот параметр несколько раз, если вы хотите создать один PO-файл сразу для нескольких документов.

=item B<-M>, B<--master-charset>

Кодировка файла, содержащаяся в документе для перевода.

=item B<-l>, B<--localized>

Файл, содержащий локализованный (переведённый) документ. Если вы указали несколько мастер-файлов, может возникнуть необходимость предоставить несколько файлов локализации, указав данный параметр несколько раз.

=item B<-L>, B<--localized-charset>

Кодировка файла, содержащего переведённый документ.

=item B<-p>, B<--po>

Файл в который будет записан каталог сообщений. Если не задан, то каталог сообщений будет записан в стандартный вывод.

=item B<-o>, B<--option>

Дополнительные параметры, передаваемые модулю формата. См. описание возможных параметров и их значений в документации каждого конкретного модуля. Например, вы можете указать '-o tablecells' парсеру AsciiDoc, в то время как парсер text принимал бы '-o tabs=split'.

=item B<-h>, B<--help>

Отобразить короткую справку.

=item B<--help-format>

Выводит список поддерживаемых po4a форматов.

=item B<-k> B<--keep-temps>

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

=item B<-V>, B<--version>

Отобразить версию и завершить работу сценария.

=item B<-v>, B<--verbose>

Увеличить количество выводимой пояснительной информации.

=item B<-d>, B<--debug>

Вывод отладочной информации.

=item B<--msgid-bugs-address> I<email@address>

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

=item B<--copyright-holder> I<строка>

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

=item B<--package-name> I<строка>

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

=item B<--package-version> I<строка>

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

=back

=head2 Преобразование уже существующего перевода в po4a

B<po4a-gettextize> синхронизирует мастер-файла с его переведённой версией, извлекая их содержимое в PO-файл. Содержимое мастер-файла даёт B<msgid>, а содержимое переведённого — B<msgstr>. Этот процесс в некоторой степени хрупок: предполагается что N-ый строка, извлечённая из переведённого файла является переводом N-ой строки исходного.

Геттекстизация пройдёт легче, если вы сможете заполучить в точности ту версию исходного документа, которая использовалась для перевода. Хотя даже в этом случае вам, возможно, придётся немного поиграться и с мастер-документом, и с его переведённой версией, чтобы выравнять их структуры, например, в ситуации, когда они были изменены изначальным переводчиком.

Внутренне, каждый парсер po4a возвращает синтаксический тип для каждой извлечённой строки. Это и помогает определить рассинхрон файлов во время геттекстизации. Например, в ситуации приведённой ниже очень маловероятно, что 4-я строка в переводе (типа «глава») является переводом 4-й строки в оригинале (типа «параграф»). Скорее в оригинал был добавлен новый параграф или два параграфа оригинала были объединены в переводе.

    Оригинал           Перевод

  глава              глава
    параграф           параграф
    параграф           параграф
    параграф         глава
  глава                параграф
    параграф           параграф

B<po4a-gettextize> будет выдавать подробные диагностические сообщения о любых расхождениях в структуре файлов. Кода такое произойдёт, вам придётся вручную отредактировать эти файлы: добавить какие-то суррогатные параграфы или удалить что-то то там то тут, дабы исправить найденные несоответствия так, чтобы структура обоих файлов в точности совпадала. Несколько трюков, как это сделать так, чтобы сохранить как можно большую часть уже готового перевода, приведены ниже.

Если вам повезёт и структура обоих документов идеально совпадает, то создание корректного PO-файла займёт всего несколько секунд. В противном случае вы вскоре поймёте, почему у этого процесса такое уродливое название :). Но даже в таком случае, геттекстизация будет быстрее, чем переводить всё с нуля. Например, я геттекстизировал Французский перевод всей документации Perl за один день, несмотря на то, что у меня возникло I<много> проблем с синхронизацией. Учитывая объём (2Mb оригинального текста), перевод всего этого с нуля не сохраняя предыдущие наработки занял бы несколько месяцев. К тому же, эта грязная работёнка — это та цена, которую придётся заплатить за то, чтобы пользоваться удобствами po4a в дальнейшем. Как только вы завершите процесс преобразования, синхронизация между мастер-документом и переводами станет полностью автоматической.

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

=head3 Подсказки и хитрости для процесса gettextization

Как только в файлах обнаруживается рассинхронизация, процесс гетекстизации останавливается. Когда это происходит, вам придётся вручную отредактировать файлы так, чтобы их структуры снова стали выравненными. B<po4a-gettextize> довольно подробно описывает, что пошло не так. Он выдаст вам строки, которые не совпадают, их местоположение в документах и тип каждой из них. Кроме того, созданный до момента этого сбоя PO-файл будет сбрасываться в F<gettextization.failed.po>.

Вот еще несколько приемов, которые помогут вам в этом утомительном процессе и гарантировать, что вы сохранить большую часть уже сделанного перевода:

=over 

=item 

Удалите все лишнее содержимое из переводов, например, раздел с благодарностями переводчикам. С B<po4a> подобные разделы должны добавляться в виде аддендумов (B<addendum>, см. L<po4a(7)>).

=item 

Когда вы редактируете файлы, чтобы выравнять их структуры, то, по-возможности, лучше редактировать перевод. Действительно, если изменения в оригинале будут слишком навязчивыми, старая и новая версии не будут корректно сопоставлены при первом запуске po4a после геттекстизации (см. ниже). Любые переводы, которым нет соответствий в оригинале всё равно придётся выбросить. Тем не менее, в некоторых ситуациях, когда иначе продолжить геттекстизацию не получается, иногда будет легче всё же внести правку и в исходный документ; даже если это и означает, что один из абзацев перевода будет отброшен. Главное на этом этапе — получить первый PO-файл, с которого можно начать дальнейшую работу.

=item 

Не стесняйтесь удалять какой-либо текст в оригинале, которого нет в переведённой версии. В дальнейшем всё это содержимое будет восстановлено при синхронизации PO-файла с документом.

=item 

Если вы считаете, что ваши изменения структуры документа в переводе оправданы, то, скорее всего, вам следует связаться по этому поводу с его автором. О проблемах оригинального документа нужно сообщать автору оригинального документа. Если вы исправляете их только в своём переводе, то вы исправляете эти проблемы только для части сообщества. И кроме того, это невозможно при использовании po4a ;). Однако, с этим, наверное, лучше будет повременить до окончания конвертации проекта для работы с B<po4a>.

=item 

Иногда содержимое абзацев совпадает, но не их типы. То, как именно разрешить эту ситуацию, зависит от формата. В POD и man это зачастую происходит из-за того, что один из них начинается с пробела, а другой — нет. Для этих форматов в таком абзаце (начинающемся с пробела) запрещён перенос строк и, таким образом, он рассматривается, как имеющий другой тип. Просто удалите пробел и всё будет в порядке. Это также может быть вызвано, например, опечаткой в имени тега в XML.

Аналогично, два абзаца могут слиться в один в POD, когда разделяющая их строка содержит пробелы или когда между B<=item> и содержимым элемента нет пустой строки.

=item 

Иногда сообщения о рассинхронизации кажутся странными так как перевод привязывается не к тому абзацу оригинала. Это признак того, что проблема где-то выше не была обнаружена. Ищите истинную точку рассинхронизации, исследуя содержимое файла F<gettextization.failed.po>, созданного после неудачной геттекстизации, и исправьте проблему там.

=item 

Другой класс проблем может возникать из-за дубликатов строк (когда одна и таже строка встречается в файле несколько раз) в оригинале или переводе. Дубликаты строк объединяются в PO-файле в одну с несколькими сносками. Это является проблемой для алгоритма геттекстизации, так как он просто попарно берёт B<msgid> полученные из мастер-файла и из перевода. Однако, считается, что относительно новые версии po4a могут корректно обрабатывать дубликаты строк, так что вам следует сообщать о любых оставшихся проблемах, с которыми вы столкнётесь.

=back

=head2 Проверка файлов, созданных B<po4a-gettextize>

Любой файл, созданный B<po4a-gettextize>, должен подлежать тщательной ручной проверке, даже если выполнение завершается успешно. Вам следует просмотреть PO-файл и убедиться, что B<msgid> и B<msgstr> действительно соответствуют друг другу. На данном этапе пока нет необходимости проверять полную корректность перевода, поскольку все записи и так помечаются как «неточные» (fuzzy). Вам надо только проверить, нет ли очевидных проблем с соответствием переводов исходным строкам, поскольку те переводы которые окажутся сопоставлены не своим строкам, будут попросту удалены на последующих этапах в то время, как вам, вероятно, хотелось бы их сохранить.

К счастью, для данной задачи не обязательно овладевать целевым языком в полной мере, ибо вам нужно будет только распознавать похожие элементы в B<msgid> и соответствующем ему B<msgstr>. Например я, как человек говорящий по-французски, по-английски и немного по-немецки, могу произвести подобную проверку, по крайней мере, для всех европейских языков не смотра на то, что я не могу выговорить ни слова на большинстве из них. Иногда мне удаётся обнаружить проблемы с сопоставлением и в языках с не-латинской письменностью. В этих случаях можно обращать внимание на длину строк, структуру фраз (совпадает ли количество вопросительных знаков?) и другие подсказки, но проверку подобных языков я предпочитаю оставлять на кого-то другого.

Если вы обнаружите несоответствия, то отредактируйте исходный файл или перевод также, как если бы B<po4a-gettextize> сообщил об ошибке, и попробуйте снова. Как только у вас получится сносный PO-файл для уже существующего перевода, сохраните его резервную копию и отложите в сторону до тех пор, пока вы не настроите po4a так, чтобы она корректно обрабатывала ваш проект.

=head2 Запуск B<po4a> в первый раз

Самый простой способ подготовить po4a к работе — создать файл настроек B<po4a.conf> и дальше пользоваться интегрированной утилитой B<po4a> (B<po4a-updatepo> и B<po4a-translate> устарели). Более подробно это описано в раздел «ФАЙЛ НАСТРОЕК» в L<po4a(1)>.

При первом запуске B<po4a> текущая версия мастер-документов будет использоваться для обновления PO-файлов, содержащих старые переводы, которые вы вытащили во время геттекстизации. Это может занять довольно длительное время, поскольку многие B<msgid> после геттекстизации могут в некоторой степени отличаться от тех, что в POT-файле, созданном из последних мастер-файлов. Это приводит к тому, что gettext вынужден искать ближайшие соответствия, используя дорогостоящие алгоритмы приближённого сопоставления строк. Например, первый подобный запуск для французского перевода документации Perl (PO-файл размером 5,5 МБ) занял около 48 часов (да, два дня), а последующие — всего несколько секунд.

=head2 Переход к повседневной работе с переводами

После этого первого запуска PO-файлы готовы к проверке переводчиками. После работы B<po4a-gettextization> все записи в PO-файле были помечены как неточные (fuzzy), что вынудит переводчиков проверять их тщательно, прежде чем использовать. Переводчики должны проверить каждую запись, чтобы убедиться, что сохранённый перевод действительно соответствует текущему исходному тексту, по-необходимости обновить перевод и удалить пометку «неточный».

Как только достаточное количество переводов будут проверены (будут сняты пометки о «неточный»), B<po4a> начнёт создавать переведённые файлы на их основе, и вы будете готовы полностью интегрировать данный рабочий процесс в свою повседневную деятельность. Некоторые проекты полагаются на такие сервисы, как, например, weblate для координации взаимодействия между переводчиками и сопровождающими проекта, но это уже выходит за рамки описания работы с B<po4a>.

=head1 СМОТРИТЕ ТАКЖЕ

L<po4a(1)>, L<po4a-normalize(1)>, L<po4a-translate(1)>, L<po4a-updatepo(1)>, L<po4a(7)>.

=head1 АВТОРЫ

 Денис Барбье (Denis Barbier) <barbier@linuxfr.org>
 Николя Франсуа (Nicolas François) <nicolas.francois@centraliens.net>
 Мартин Кенсон (Martin Quinson) (mquinson#debian.org)

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

Copyright 2002-2023 by SPI, inc.

Данная программа является свободным программным обеспечением; вы можете распространять и/или изменять её на условиях Универсальной общественной лицензии (GPL) GNU v2.0 или новее (см. файл COPYING).

