Locale::Po4a::Man(3pm) | Інструменти Po4a | Locale::Po4a::Man(3pm) |
Locale::Po4a::Man — перетворення сторінок підручника на файли PO, і навпаки
Метою проекту po4a (PO для усього) є спрощення перекладу (та, що ще цікавіше, супровід перекладів) за допомогою інструментів gettext у областях, де такий переклад спочатку не передбачався, зокрема у документації.
Locale::Po4a::Man — модуль, який допомагає у перекладі документації у форматі nroff (мовою сторінок підручника) іншими мовами (якими розмовляють люди).
Цей модуль намагається зробити завдання перекладача якомога простішим. Для цього текст, який отримає перекладач, не є буквальною копією тексту із сторінки підручника. Найнеоковирніші частини коду nroff приховано так, щоб перекладачі не мали з ними справи.
Абзаци без відступів автоматично розбиваються для перекладачів на рядки. Це може призвести до незначних відмінностей у результатах, оскільки правила розбиття на рядки, які використовує groff, не є доволі чіткими. Наприклад, два пробіли після дужки іноді зберігаються.
Щоб там не було, а відмінності стосуються лише розташування додаткових пробілів у розбитому на рядки абзаці. Мені здається, що можливість перекладати текст у зручний спосіб варта таких відмінностей.
Перша зміна стосується специфікації зміни шрифту. У nroff передбачено декілька способів вказати, як має бути написано певне слово, — малим шрифтом, напівжирним шрифтом або курсивом. У тексті для перекладу передбачено лише один з цих способів, для якого використано формат POD (інтернет-документації Perl):
Зауваження: гарнітурою CW можна скористатися на на всіх пристроях groff. Не рекомендуємо користуватися нею. Її реалізовано лише для зручності.
Po4a автоматично транслітерує деякі символи з метою спрощення перекладу або рецензування перекладу. Ось список цих транслітерацій:
Перекладачі можуть примусово наказати вставити дефіс за допомогою гліфу roff «\[hy]», який вписано у переклад.
Щоб уникнути таких транслітерацій, перекладачі можуть вставляти символ нульової ширини roff (тобто користуватися `\&` або '\&', відповідно).
Оскільки ці символи використовуються для позначення частин у записах модифікації шрифтів, ви не можете використовувати їх буквально. Скористайтеся замість буквальних записами 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 "День
місяця,
рік" OS
"Назва
розділу"
Вказані нижче параметр надають змогу вказати поведінку для нового макросу (визначеного за допомогою запиту .de) або для макросу, підтримку якого не передбачено у po4a. Аргументом цих параметрів є список назв макросів, відокремлених комами. Приклад:
-o noarg=FO,OB,AR -o translate_joined=BA,ZQ,UX
Зауваження: якщо підтримку макросу не передбачено у po4a, а ви вважаєте, що це стандартний макрос roff, вам слід повідомити про це команду розробників po4a.
Зауваження: програма не виконуватиме ніяких перевірок щодо того, чи є відповідність між командами кінець і початок — будь яка команда завершення розділу зупинятиме дію режиму no_wrap. Якщо у тексті є макрос початок (відповідно, кінець) без відповідника кінець (відповідно, початок), ви можете вказати наявний у тексті кінець (наприклад, fi) або початок (наприклад, nf) як відповідник обмежувача розділу. Ці макроси (та їхні аргументи) не перекладатимуться.
Можливості цього модуля дуже обмежено, і так буде завжди, оскільки він не є повноцінним інтерпретатором nroff. Можна було б створити справжній інтерпретатор nroff, щоб надати авторам змогу використовувати усі наявні макроси або навіть визначати нові макроси на власних сторінках, але нам не хотілося цього робити. Це надто ускладнило б справу, і нам здається, що у цьому немає потреби. Нам здається, що якщо автори сторінок підручника хочуть, щоб їхню роботу було перекладено, їм буде неважко зробити синтаксис сторінки простішим, щоб спростити роботу перекладачам.
Отже, у обробника сторінок підручника, реалізованого у po4a є декілька відомих обмежень, які ми не хочемо усувати, і які визначають межі певних пасток, до яких ви не повинні потрапити, якщо хочете, щоб над вашою документацією попрацювали перекладачі.
nroff є повноцінною мовою програмування із визначенням макросів, умов тощо. Оскільки цей обробник не є повноцінним інтерпретатором nroff, він не зможе працювати зі сторінками, де використовуються можливості 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 не слід перекладати, а у другому — слід.
У такому разі, автор може заборонити po4a видобувати певні рядки за допомогою спеціальних конструкцій у groff:
.if !'po4a'hide' .B other
(це потребуватиме параметра -o groff_code=verbatim)
Також
мона
визначити
новий
макрос для
автоматизації
цього:
.de IR_untranslated
. IR \\$@
..
.IR_untranslated \-q ", " \-\-quiet
(Це потребує параметрів -o groff_code=verbatim та -o untranslated=IR_untranslated. Якщо використано цю конструкцію, умова .if !'po4a'hide' не є обов'язковою, оскільки po4a не оброблятиме внутрішньої частини визначення макросу.)
або за
допомогою
альтернативи:
.als IR_untranslated IR
.IR_untranslated \-q ", " \-\-quiet
Це потребуватиме параметра -o untranslated=als,IR_untranslated.
Підсумовуючи написане у цьому розділі, намагайтеся бути простішими, не ускладнюйте речі при написанні ваших сторінок підручника. У nroff багато можливостей, але підтримки деяких з них не передбачено у цьому засобі обробки. Наприклад, не намагайтеся використовувати \c для переривання обробки тексту (як це зроблено на 40 сторінках у моїй системі). Також розміщуйте аргументи макросу у тому самому рядку, що і макрос. Я знаю, що так можна робити у nroff, але це надто ускладнює роботу засобу обробки даних.
Звичайно ж, можна скористатися іншим форматом, який є зручнішим для перекладу (зокрема POD із використанням po4a::pod або один із форматів сімейства XML, зокрема SGML), але завдяки po4a::man у цьому більше немає потреби. Втім, якщо початковим форматом вашої документації є POD або XML, ймовірно, варто перекладати її у початковому форматі, а не у автоматично обробленому. У більшості випадків po4a::man виявить автоматично створені сторінки і попередить про це. Модуль навіть відмовиться обробляти створені за допомогою POD сторінки, оскільки ці сторінки чудово обробляються модулем po4a::pod і оскільки відповідник nroff визначає багато нових макросів, підтримку яких у модулі man автор не хотів би реалізовувати. У системі автора модуля 1432 із 4323 сторінок створено на основі POD. Такі сторінки ігноруватимуться модулем po4a::man.
Здебільшого, po4a::man виявлятиме проблеми і відмовлятимуться обробляти сторінку, видаючи відповідне повідомлення. У деяких рідкісних випадках програма завершить роботу без повідомлення про помилку, але виведені дані будуть помилковими. Такі випадки ми називаємо «вади» ;) Якщо вам трапиться такий випадок, звичайно ж, повідомте про нього розробникам, бажано, із виправленням…
Цим модулем можна скористатися для більшості наявних сторінок підручника.
Ось результати регулярного тестування у системах Linux:
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)
© SPI, Inc., 2002–2008.
Ця програма є вільним програмним забезпеченням; ви можете поширювати її і/або вносити до неї зміни за умов дотримання GPL (див. файл COPYING).
2018-12-09 | Інструменти Po4a |