Locale::Po4a::Man(3pm) | Инструменты Po4a | Locale::Po4a::Man(3pm) |
Locale::Po4a::Man - преобразование man-страниц из/в PO файлы
Целью проекта po4a (PO везде или для всего) является облегчение процесса перевода (и что более важно - поддержка переводов), использующего инструменты gettext там, где переводимые файлы не выглядят как документация.
Locale::Po4a::Man является модулем, предназначенным для помощи в переводе документации в формате nroff (язык man-страниц) на другие [человеческие] языки.
Данный модуль делает достаточно трудную жизнь переводчика легче. Для этого, текст предоставляемый переводчику, не является полной копией текста, обнаруженной в man-странице. Фактически, части, относящиеся к nroff форматированию скрываются, поэтому переводчик не может их испортить.
Unindented paragraphs are automatically rewrapped for the translator. This can lead to some minor difference in the generated output, since the rewrapping rules used by groff aren't very clear. For example, two spaces after a parenthesis are sometimes preserved.
В любом случае, изменения будут относиться к положению дополнительных пробелов в переформатированном параграфе и, как мне кажется, это неважно.
Первое изменение относится к изменению способа определения шрифтов. В nroff существует несколько способов определения того, каким должен быть шрифт: маленьким, жирным или курсивом. В тексте для перевода существует только один способ, наследуемый из формата POD (Perl online documentation):
Заметка: Начертание CW доступно не для всех groff устройствах. Такое начертание не рекомендуется использовать. Предоставляется только для вашего удобства.
Po4a автоматически транслитерирует некоторые буквы для облегчения перевода или последующего чтения. Ниже приведён список транслитераций:
Переводчики могут принудительно использовать roff дефис '\[hy]' в своих переводах.
Чтобы избежать подобной транлитерации, переводчики могут вставить roff символ нулевой ширины (т.е., использовать `\&` или '\&' соответственно).
Поскольку эти символы используются для разграничения глав (to delimit parts under font modification), используйте вместо них E<lt> и E<gt> (так же как в POD).
Ниже приведены, специфические для данного модуля, параметры:
Позволяет использовать строгий формат mdoc, указывая po4a не переводить секцию 'NAME'.mdoc страницы, секция 'NAME' которых не будет создавать никаких заголовков при переводе.
Согласно
странице
groff_mdoc секции NAME,
SYNOPSIS и DESCRIPTION
обязательны.
Есть
нерешённые
проблемы
при
переводе
секций SYNOPSIS
или DESCRIPTION, но вы
можете
определить
эти
секции
следующим
образом:
-o mdoc=NAME,SYNOPSIS,DESCRIPTION
Проблемы
mdoc также
могут
быть
решены
следующим
образом:
PO4A-HEADER:mode=before;position=^.Dd
.TH DOCUMENT_TITLE 1 "Month day, year" OS "Section
Name"
Следующие параметры позволяют определить поведение новых макросов (определённые с помощью запроса .de), или макросов, которые не поддерживаются po4a. В качестве аргумента подаётся список макросов, разделённый запятыми. Например:
-o noarg=FO,OB,AR -o translate_joined=BA,ZQ,UX
Заметка: если макрос не поддерживается po4a и если вы считаете, что это стандартный макрос roff, сообщите, пожалуйста, о нем команде разработчиков po4a.
Заметка: не проводится никакого тестирования для того, чтобы удостовериться, что каждой команде end соответствует команда begin; любая завершающая команда отключает режим no_wrap . Если встречается макрос begin (соответственно end) или макрос end (соответственно begin), вам необходимо определить существующий end (like fi) или begin (like nf). Данный макрос (и его аргументы) переводить не нужно.
Данный модуль очень ограничен и будет таким всегда, так как он не является интерпретатором nroff. Возможно в будущем можно будет создать настоящий интерпретатор nroff, чтобы предоставить авторам возможность использовать все существующие макросы, но мы не хотим делать это. Это может оказаться слишком сложной задачей и, как мы считаем, в этом нет необходимости. Мы считаем, что если авторы man-страниц хотят видеть свои продукты переведёнными, то они могут их адаптировать, чтобы облегчить работу переводчикам.
Таким образом парсер () встроенный в po4a имеет несколько известных ограничений, которые мы не склонны корректировать, и которые содержат в себе потенциальные опасности, которые вам необходимо учитывать если вы хотите, чтобы переводчики заботились о вашей документации.
nroff это полноценный язык программирования, с возможностью определения макросов, conditionals и так далее. Так как этот парсер не является полнофункциональным интерпретатором nroff, он не сможет обработать страницы, использующие эти возможности (у меня есть около 200 таких страниц).
Существуют еще несколько макросов, которые не поддерживаются po4a::man. Только потому что я не смог отыскать документацию по ним. Ниже приведён список неподдерживаемых макросов, используемых на моем компьютере. Обратите внимание, что этот список не является полным, так как программа завершает работу при первой встрече с неподдерживаемым макросом. Если у вас есть информация о каком-либо из этих макросов, я с удовольствием добавлю поддержку данных макросов. Потому что на моем компьютере около 250 страниц некорректно обрабатывающихся po4a::man.
.. ." .AT .b .bank .BE ..br .Bu .BUGS .BY .ce .dbmmanage .do .En .EP .EX .Fi .hw .i .Id .l .LO .mf .N .na .NF .nh .nl .Nm .ns .NXR .OPTIONS .PB .pp .PR .PRE .PU .REq .RH .rn .S< .sh .SI .splitfont .Sx .T .TF .The .TT .UC .ul .Vb .zZ
Иногда автор знает, что некоторые части не надо переводить и поэтому не должны извлекаться программой po4a. Например настройка может принимать аргумент other, и other может всегда появляться конце списка. В первом случае, other не должен переводиться. А во втором случае other должен быть переведён.
В данном случае, автор может избежать извлечения некоторых строк программой po4a, с помощью использования некоторых groff конструкций:
.if !'po4a'hide' .B other
(это потребует ключа -o groff_code=verbatim)
Можно
определить
также
новый
макрос,
чтобы
автоматизировать
этот
процесс:
.de IR_untranslated
. IR \\$@
..
.IR_untranslated \-q ", " \-\-quiet
(this will require the options -o groff_code=verbatim and -o untranslated=IR_untranslated; with this construct, the .if !'po4a'hide' conditional is not strictly needed since po4a will not parse the internal of the macro definition)
or using an alias:
.als IR_untranslated IR
.IR_untranslated \-q ", " \-\-quiet
это потребует ключа -o groff_code=verbatim.
To summarise this section, keep simple, and don't try to be clever while authoring your man pages. A lot of things are possible in nroff, and not supported by this parser. For example, don't try to mess with \c to interrupt the text processing (like 40 pages on my box do). Or, be sure to put the macro arguments on the same line that the macro itself. I know that it's valid in nroff, but would complicate too much the parser to be handled.
Of course, another possibility is to use another format, more translator friendly (like POD using po4a::pod, or one of the XML family like SGML), but thanks to po4a::man it isn't needed anymore. That being said, if the source format of your documentation is POD, or XML, it may be clever to translate the source format and not this generated one. In most cases, po4a::man will detect generated pages and issue a warning. It will even refuse to process POD generated pages, because those pages are perfectly handled by po4a::pod, and because their nroff counterpart defines a lot of new macros I didn't want to write support for. On my box, 1432 of the 4323 pages are generated from POD and will be ignored by po4a::man.
In most cases, po4a::man will detect the problem and refuse to process the page, issuing an adapted message. In some rare cases, the program will complete without warning, but the output will be wrong. Such cases are called "bugs" ;) If you encounter such case, be sure to report this, along with a fix when possible…
This module can be used for most of the existing man pages.
Some tests are regularly run on Linux boxes:
Locale::Po4a::Pod(3pm), Locale::Po4a::TransTractor(3pm), po4a(7)
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
Copyright © 2002-2008 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-12-09 | Инструменты Po4a |