LOCALE::PO4A::SGML.3PM(1) | User Contributed Perl Documentation | LOCALE::PO4A::SGML.3PM(1) |
НАЗВА¶
Locale::Po4a::Sgml — перетворення документів SGML на файли PO, і навпаки
ОПИС¶
Метою проєкту po4a (PO для усього) є спрощення перекладу (та, що ще цікавіше, супровід перекладів) за допомогою інструментів gettext у областях, де такий переклад спочатку не передбачався, зокрема у документації.
Locale::Po4a::Sgml — модуль, який допомагає у перекладі документації у форматі SGML іншими мовами (якими розмовляють люди).
Цей модуль використовує для обробки файлів SGML onsgmls(1). Переконайтеся, що цю програму встановлено. Також переконайтеся, що у системі встановлено DTD усіх файлів SGML.
ПАРАМЕТРИ, ЯКІ МОЖНА ПЕРЕДАВАТИ ЦЬОМУ МОДУЛЮ¶
- debug
- Space-separated list of keywords indicating which category of extra debug messages should be shown. Possible values are: "entities", "generic", "onsgml", "refs" and "tag".
- verbose
- Надавати більше інформації щодо того, що відбувається.
- translate
- Список відокремлених пробілами додаткових теґів (окрім визначених у DTD), чий вміст має формувати додаткові msgid, тобто те, що має бути перекладено.
- section
- Список відокремлених пробілами додаткових теґів (окрім визначених у DTD), які містять інші теґи, деякі з яких належать до категорії translate.
- indent
- Список відокремлених пробілами теґів, які збільшують рівень відступу. Це вплине на відступи рядків у отриманому документі.
- verbatim
- Компонування, у якому не слід змінювати теґи. Рядки у абзаці не переноситимуться, не буде додаватися додатковий відступ або розрив рядка з косметичною метою.
- empty
- Теґи не обов'язково слід закривати.
- ignore
- Теґи, які po4a має ігнорувати і вважати звичайними символьними даними. Тобто теґи, які можуть бути частиною msgid. Наприклад, <b> є непоганим кандидатом до цієї категорії, оскільки, якщо цей теґ перебуває у розділі translate, програма створюватиме повідомлення для перекладу (зазвичай такі, які не є цілими реченнями), що є помилкою.
- attributes
- A space-separated list of attributes that need to be translated. You can specify the attributes by their name (for example, "lang"), but you can also prefix it with a tag hierarchy, to specify that this attribute will only be translated when it is into the specified tag. For example: "<bbb><aaa>lang" specifies that the lang attribute will only be translated if it is in an "<aaa>" tag, which is in a "<bbb>" tag. The tag names are actually regular expressions so you can also write things like "<aaa|bbb>lang" to only translate "lang" attributes that are in an "<aaa>" or a "<bbb>" tag.
- qualify
- Список відокремлених пробілами атрибутів, для яких переклад має бути кваліфіковано назвою атрибуту, тобто для яких видобутий для перекладу текст має містити одразу назву атрибута та його значення. Приклад: для теґу, подібного до "<aaa lang_en="foo">", перекладачам буде надано рядок "lang_en="foo"". Зауважте, що цей параметр автоматично додає вказаний атрибут до списку attributes.
- force
- Продовжувати обробку, навіть якщо DTD є невідомим, а onsgmls виявляє помилки у файлі вхідних даних.
- include-all
- Типово, msgid, у яких міститься лише замінник (наприклад, "&version;"), пропускаються заради полегшення роботи перекладачів. Використання цього параметра запобігає такій оптимізації. Корисно для документів, у яких містяться конструкції, подібні до "<title>Á</title>", хоча я і сумніваюся, що таке десь трапляється...
- ignore-inclusion
- Список відокремлених пробілами замінників, які не вставлятимуться у текст. Будьте обережними із цим параметром: його використання може спричинити додавання onsgmls (програмою, яку використовує модуль) теґів і неправильне формування документа-результату.
СТАН ЦЬОГО МОДУЛЯ¶
Відмінний результат, тобто створені документи є ідентичними з оригіналом. Але усе ще є деякі проблеми:
- Повідомлення
про
помилки
від onsgmls
типово
переспрямовуються
до /dev/null, а це
погано. Не
знаю, як
цього
уникнути.
Проблема полягає у тому, що мені довелося «захистити» умовні включення (тобто конструкції "<! [ %щось [" і "]]>") від onsgmls. Якщо цього не зробити, onsgmls «з'їсть» їх, і я не знаю, як їх відновити у остаточному документі. Щоб запобігти цьому, я перезаписую їх виразами "{PO4A-beg-щось}" та "{PO4A-end}".
Проблемним у цьому лишається те, що додані мною "{PO4A-end}" і інші подібні речі є некоректними у документі (не перебувають у тезі <p> або подібному).
Якщо хочете ознайомитися із даними, виведеними onsgmls, просто додайте наведений нижче рядок до рядка команди (або рядка налаштовування po4a):
-o debug=onsgmls
- Модуль
працює
лише для DTD DebianDoc
та DocBook.
Додавання
підтримки
нових DTD є
доволі
простим.
Механізм є
однаковим
для усіх DTD,
вам слід
вказати
лише
список
наявних
теґів та
деякі їхні
характеристики.
Згоден, потрібно більше документації, але модуль вважається тестовим, а мені не дуже хочеться документувати, те що буде змінено або може бути змінено.
- Попередження:
підтримка
DTD є доволі
експериментальною.
Я не читав
довідники,
щоб знайти
визначення
для
кожного
теґу. Я
додавав
теґи до
модуля, аж
доки усе не
почало
працювати
для певних
документів,
які я
знайшов у
мережі.
Якщо у
вашому
документі
більше
теґів,
модуль не
спрацює.
Але, як уже
було
написано
вище,
виправити
цей
недолік
дуже
просто.
Підтримку DocBook було перевірено лише на SAG (Підручнику системного адміністратора), але цей документ є доволі об'ємним, у ньому має бути використано більшу частину специфікаторів DocBook.
Підтримку DebianDoc було перевірено на підручниках з DDP, але не на всіх.
- Якщо до
документа
включаються
додаткові
файли,
посилання
на рядки у
повідомленнях
файлів PO
(тобто
записи,
подібні до
"#: en/titletoc.sgml:9460")
будуть
помилковими.
Причиною є те, що попередньо файл обробляється для захисту умовних включень (тобто конструкцій типу "<! [ %щось [" і "]]>") та деяких замінників (наприклад, "&version;") від onsgmls, оскільки нам вони у створеному документі потрібні без змін. Для цього створюється тимчасова копію файла вхідних даних, до якої вносяться усі потрібні зміни до передавання даних до onsgmls для обробки.
Отже, у процесі обробки усі замінники, які є включеннями файлів замінюються вмістом відповідних файлів (щоб можна було захистити виразу і у підлеглих файлах). Втім, ніякого коду для виправлення посилань (тобто визначення назв файлів та номерів рядків у них) після обробки ще не написано. У мене немає певності щодо того, як зробити це у найкращий спосіб.
АВТОРИ¶
Цей модуль є адаптованою версією sgmlspl (обробника SGML для ONSGMLS), автором якої є:
© David Megginson <dmeggins@aix1.uottawa.ca>, 1995
Авторами адаптації до po4a є:
Denis Barbier <barbier@linuxfr.org> Martin Quinson (mquinson#debian.org)
АВТОРСЬКІ ПРАВА ТА ЛІЦЕНЗУВАННЯ¶
© David Megginson <dmeggins@aix1.uottawa.ca>, 1995 © SPI, Inc., 2002—2005
Ця програма є вільним програмним забезпеченням; ви можете поширювати її і/або вносити до неї зміни за умов дотримання GPL версії 2.0 або пізнішої (див. файл COPYING).
2024-08-06 | perl v5.38.2 |