.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "PO4A 1p" .TH PO4A 1p "2023-01-03" "Інструменти Po4a" "Інструменти Po4a" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "НАЗВА" .IX Header "НАЗВА" po4a — оновлення файлів \s-1PO\s0 і перекладених документів у один прохід .SH "КОРОТКИЙ ОПИС" .IX Header "КОРОТКИЙ ОПИС" \&\fBpo4a\fR [\fIпараметри\fR] \fIфайл_налаштувань\fR .SH "ОПИС" .IX Header "ОПИС" po4a («PO for anything» або «PO для усього») спрощує супровід перекладу документації з використанням класичних інструментів gettext. Основною перевагою po4a є відокремлення придатного до перекладу вмісту документа від його структури. Будь ласка, зверніться до сторінки \fBpo4a\fR\|(7), щоб ознайомитися зі вступними зауваженнями щодо цього проєкту. .PP Під час виконання \fBpo4a\fR обробляє усі файли документації, вказані у файлі налаштувань програми. Програма оновлює файли \s-1PO\s0 (файли, які містять переклад) відповідно до усіх змін у документації і створює перекладені документи, вставивши вміст перекладу (який зберігається у файлах \s-1PO\s0) до структури початкових основних документів. .PP Спочатку, у файлах \s-1PO\s0 містяться лише рядки з початкової документації, які слід перекласти. Файли у цьому форматі надають змогу перекладачам вручну перекласти кожен із абзаців документації, які видобуто \fBpo4a\fR. Якщо до документації після того, як її буде перекладено, буде внесено зміни, \fBpo4a\fR позначить відповідні переклади у файлі \s-1PO\s0 як «неточні» з метою наступного рецензування цих перекладів перекладачами. Крім того, перекладачі можуть надавати так звані «додатки», додаткові дані, у яких, наприклад, вказано, ким виконано переклад і як надсилати повідомлення про вади. .PP .Vb 11 \& основні документи\-\-\-+\-\-\-\->\-\-\-\-\-\-\-\->\-\-\-\-\-\-\-\-\-+ \& (документування) | | \& V (виконання po4a) >\-\-\-\-\-+\-\-> переклади \& | | | \& наявні файли PO \-\->\-> оновлені файли PO >\-+ | \& ^ | | \& | V | \& +\-\-\-\-\-\-\-\-\-\-<\-\-\-\-\-\-\-\-\-<\-\-\-\-\-\-\-+ ^ \& (процес перекладу підручника) | \& | \& додаток \-\-\->\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ .Ve .PP Робочий процес у \fBpo4a\fR є асинхронним, таким, що пасує проєктам із відкритим кодом. Автори документації створюють основні документи за власним графіком. Перекладачі рецензують і оновлюють переклади у файлах \s-1PO.\s0 Супровідники перезапускають \fBpo4a\fR, якщо це потрібно, для відтворення будь\-яких змін у початковій документації у файлах \s-1PO\s0 і створення оновлених перекладів документації шляхом вставлення найсвіжіших перекладів до найсвіжішої структури документації. .PP Типово, програма створюватиме заданий перекладений документ, якщо перекладено принаймні 80% вмісту. Неперекладений текст зберігається початковою мовою. Таким чином, у створеній документації поєднуються мови, якщо переклад не завершено. ви можете змінити порогове значення у 80%, за допомогою параметра \fI\-\-keep\fR, який описано нижче. Відкидання перекладів, які виконано не на 100% може знизити мотивацію перекладачів, роботу яких ніколи не буде показано користувачам, але надання «перекладів», які є фрагментарними, може призвести до проблем у кінцевих користувачів. .PP Ймовірно, не варто зберігати файли перекладеної документації у системі керування версіями, оскільки їхнє створення відбувається автоматично. Вартими уваги є лише файли \s-1PO,\s0 які містять результати важкої праці ваших колег\-перекладачів. Крім того, багато кому простіше взаємодіяти з перекладачами за допомогою інтернет\-платформи, подібної до weblate, але це, звичайно ж, справа уподобань. .SS "Настанови початкового рівня" .IX Subsection "Настанови початкового рівня" Припустімо, що ви є супровідником програми із назвою \fBfoo\fR, яка має сторінку підручника \fIman/foo.1\fR, написану англійською мовою (базова мова у більшості проєктів із відкритим кодом, але \fBpo4a\fR можна скористатися для перекладу з будь\-якої мови будь\-якою мовою). Колись хтось вже виконав переклад німецькою, який має назву \fIman/foo.de.1\fR, а потім припинив участь у перекладі. Це стало проблемою, коли ви отримали звіт про ваду, яка полягає у тому, що у документації містяться помилкові дані, які слід виправити в усіх перекладах, але ви не дуже добре знаєте німецьку, тому можете виправити оригінал, але не переклад. Крім того, інший учасник хоче взяти участь у перекладі японською, мовою, якої ви також не знаєте. .PP Час перетворити документацію до формату \fBpo4a\fR, щоб усунути ці жахи супроводу документації. Ви хочете оновити документацію потрібним чином, хочете спростити роботу колегам\-перекладачам і хочете бути певні, що користувачі не бачитимуть застарілої, а отже, помилкової документації. .PP Перетворення відбувається у два кроки: налаштовування інфраструктури po4a і перетворення попереднього перекладу німецькою з метою збереження результатів раніше виконаної роботи. Другу частину роботи виконає po4a\-gettextize, як це описано нижче. Як зазначено у документації до \fBpo4a\-gettextize\fR\|(1), процес перетворення нечасто буває повністю автоматичним, але після його завершення, файл \fBde.po\fR, що містить переклад німецькою, може бути інтегровано до вашого робочого процесу po4a. .PP .Vb 1 \& po4a\-gettextize \-\-format man \-\-master foo.1 \-\-localized foo.de.1 \-\-po de.po .Ve .PP Налаштуймо po4a. Якщо використати відповідну структуру каталогів і файлів, ваш файл налаштувань може бути доволі простим: .PP .Vb 1 \& [po_directory] man/po4a/ \& \& [type: man] man/foo.1 $lang:man/translated/foo.$lang.1 .Ve .PP Тут вказано, що усі файли \s-1PO\s0 (файли, що містять роботу перекладачів) зберігаються у каталозі \fIman/po4a/\fR, і у проєкт є лише один основний файл, \fIman/foo.1\fR. Якщо б у вас було декілька основних файлів, вам слід було б дописати декілька рядків, які були б подібні до другого рядка. Кожен такий рядок визначає, куди записувати відповідні файли перекладу. Тут, перекладом \fIman/foo.1\fR є \fIman/translated/foo.de.1\fR. .PP Останнім для завершення налаштовування \fBpo4a\fR ми маємо вказати файл \s-1POT,\s0 який міститиме шаблонний матеріал, яким слід користуватися для того, щоб розпочати новий переклад. Просто створіть порожній файл із суфіксом назви .pot у вказаному po_directory (наприклад \fIman/po4a/foo.pot\fR), і \fBpo4a\fR заповнить його відповідними даними. .PP Ось короткий перелік файлів для цієї схеми роботи: .PP .Vb 7 \& ├── man/ \& │ ├── foo.1 <\- Початкова сторінка підручника англійською. \& │ ├── po4a/ \& │ │ ├── de.po <\- Переклад німецькою у форматі PO після перетворення. \& │ │ └── foo.pot <\- Шаблон POT для майбутніх перекладів (спочатку порожній) \& │ └── translated/ <\- Каталог, у якому буде створено переклади \& └── po4a.cfg <\- Файл налаштувань. .Ve .PP Після завершення налаштовування виконання \fBpo4a\fR призведе до обробки документації, оновлення файла шаблонів \s-1POT,\s0 використання його для оновлення файлів перекладу \s-1PO\s0 і використання перекладів для оновлення файлів перекладу документації. Усе однією командою: .PP .Vb 1 \& po4a \-\-verbose po4a.cfg .Ve .PP Ось і все. Тепер \fBpo4a\fR повністю налаштовано. Після виправлення вашої помилки у \fIman/foo.1\fR помилковий абзац у перекладі німецькою буде замінено виправленим текстом англійською. Суміш мов не є оптимальною, але це єдиний спосіб усувати помилки у перекладах мовами, які ви навіть не розумієте, та надання користувачам даних, які не є помилковими. Крім того, за допомогою відповідного файла \s-1PO\s0 також набагато простіше оновлювати переклад німецькою, тому суміш мов у перекладі не триматиметься аж надто довго. Нарешті, коли перекладач японською надасть вам перекладений файл jp.po, просто запишіть його як \fIman/po4a/po/\fR. Перекладена сторінка з'явиться як \fIman/translated/foo.jp.1\fR (якщо переклад є достатньо повним), коли ви знову запустите \fBpo4a\fR. .SH "ПАРАМЕТРИ" .IX Header "ПАРАМЕТРИ" .IP "\fB\-k\fR, \fB\-\-keep\fR" 4 .IX Item "-k, --keep" Мінімальне порогове значення частки перекладених рядків у відсотках, щоб файл результат було збережено, тобто записано (типове значення: 80). Інакше кажучи, типово, щоб файл було записано на диск, його має бути перекладено принаймні на 80%. .IP "\fB\-h\fR, \fB\-\-help\fR" 4 .IX Item "-h, --help" Показати коротке довідкове повідомлення. .IP "\fB\-M\fR, \fB\-\-master\-charset\fR" 4 .IX Item "-M, --master-charset" Кодування файлів, які містять документи для перекладу. Зауважте, що усі основні документи мають зберігатися у одному кодуванні. .IP "\fB\-L\fR, \fB\-\-localized\-charset\fR" 4 .IX Item "-L, --localized-charset" Кодування файлів, які містять перекладені документи. Зауважте, що усі перекладені документи мають зберігатися у одному кодуванні. .IP "\fB\-A\fR, \fB\-\-addendum\-charset\fR" 4 .IX Item "-A, --addendum-charset" Кодування для додатків. Зауважте, що дані усіх додатків мають зберігатися у одному кодуванні. .IP "\fB\-V\fR, \fB\-\-version\fR" 4 .IX Item "-V, --version" Вивести дані щодо версії скрипту і завершити роботу. .IP "\fB\-v\fR, \fB\-\-verbose\fR" 4 .IX Item "-v, --verbose" Збільшити докладність повідомлень програми. .IP "\fB\-q\fR, \fB\-\-quiet\fR" 4 .IX Item "-q, --quiet" Зменшити докладність повідомлень програми. .IP "\fB\-d\fR, \fB\-\-debug\fR" 4 .IX Item "-d, --debug" Вивести деякі діагностичні відомості. .IP "\fB\-o\fR, \fB\-\-option\fR" 4 .IX Item "-o, --option" Додаткові параметри, які слід передати додатку форматування. Докладніші відомості щодо параметрів кожного з додатків можна знайти у документації до відповідного додатка. Наприклад, ви можете передати «\-o tablecells» до обробника AsciiDoc, а обробнику звичайного тексту можна передати «\-o tabs=split». .IP "\fB\-f\fR, \fB\-\-force\fR" 4 .IX Item "-f, --force" Завжди створювати файли \s-1POT\s0 і \s-1PO,\s0 навіть якщо \fBpo4a\fR це видається непотрібним. .Sp Типова поведінка (якщо не вказано \fB\-\-force\fR) така: .RS 4 .Sp .RS 4 Якщо файл \s-1POT\s0 вже існує, його буде повторно створено, якщо момент часу внесення змін до основного документа або файла налаштувань є новішим за момент часу внесення змін до файла \s-1POT\s0 (якщо не вказано \fB\-\-no\-update\fR). Крім того, файл \s-1POT\s0 буде записано до тимчасового документа, за яким \fBpo4a\fR визначить, чи справді слід вносити якісь зміни до файла. .Sp Крім того, перекладений документ буде повторно створено, лише якщо його основний документ, файл \s-1PO,\s0 один із додатків або файл налаштувань виявиться актуальнішим. Щоб запобігти спробам повторного створення перекладених документів, які не проходять перевірки на порогове значення перекладів (див. \fB\-\-keep\fR), буде створено файл із суфіксом назви \fI.po4a\-stamp\fR (див. \fB\-\-stamp\fR). .RE .RE .RS 4 .Sp Якщо до основного документа включаються додаткові файли, вам слід скористатися прапорцем \fB\-\-force\fR, інакше час внесення змін до цих включених файлів не буде враховано. .Sp Файли \s-1PO\s0 завжди повторно створюються на основі файла \s-1POT\s0 за допомогою \fBmsgmerge \-U\fR. .RE .IP "\fB\-\-stamp\fR" 4 .IX Item "--stamp" Наказати \fBpo4a\fR створити файли штампів, якщо перекладений документ не створено через те, що його переклад не досяг порогового значення. Назви цих файлів штампів будуть відповідати назвам очікуваних перекладених документів із додаванням суфікса \fI.po4a\-stamp\fR. .Sp Зауваження: цей параметр вмикає лише створення файлів \fI.po4a\-stamp\fR. Програма завжди використовуватиме файли штампів, якщо вони існують, їх буде вилучено, лише якщо вказано параметр \fB\-\-rm\-translations\fR або переклад файла буде завершено. .IP "\fB\-\-no\-translations\fR" 4 .IX Item "--no-translations" Не створювати перекладених документів, лише оновити файли \s-1POT\s0 і \s-1PO.\s0 .IP "\fB\-\-no\-update\fR" 4 .IX Item "--no-update" Не змінювати файли \s-1POT\s0 і \s-1PO,\s0 лише оновити, якщо можливо, перекладені документи. .IP "\fB\-\-keep\-translations\fR" 4 .IX Item "--keep-translations" Зберегти файли наявного перекладу, якщо не досягнуто порогового значення, вказаного за допомогою \fB\-\-keep\fR. При цьому не буде створено нових файлів із недостатнім рівнем перекладу, натомість буде збережено застарілі файли, рівень достовірності перекладу у яких впаде через зміни у основних файлах. .Sp УВАГА: цей прапорець змінює поведінку po4a у доволі критичний спосіб: файли перекладу не оновлюватимуться, аж доки не буде поліпшено переклад. Використовуйте цей прапорець, лише якщо ви надаєте перевагу розповсюдженню застарілої перекладеної документації перед розповсюдженням точної, але не перекладеної документації. .IP "\fB\-\-rm\-translations\fR" 4 .IX Item "--rm-translations" Вилучити перекладені файли (із неявним додаванням \fB\-\-no\-translations\fR). .IP "\fB\-\-no\-backups\fR" 4 .IX Item "--no-backups" Цей прапорець не діє з версії 0.41, його може бути вилучено у наступних випусках. .IP "\fB\-\-rm\-backups\fR" 4 .IX Item "--rm-backups" Цей прапорець не діє з версії 0.41, його може бути вилучено у наступних випусках. .IP "\fB\-\-translate\-only\fR \fIперекладений\-файл\fR" 4 .IX Item "--translate-only перекладений-файл" Перекласти лише вказаний файл. Може бути корисним для пришвидшення обробки файла налаштувань, якщо у файлі налаштувань міститься багато файлів. Зауважте, що використання цього параметра не призведе до оновлення файлів \s-1PO\s0 і \s-1POT.\s0 Цей параметр можна використовувати декілька разів у одній команді. .IP "\fB\-\-variable\fR \fIзмінна\fR\fB=\fR\fIзначення\fR" 4 .IX Item "--variable змінна=значення" Визначити змінну, яку буде розгорнуто у файлі налаштувань \fBpo4a\fR. Усі випадки використання змінної \fI$(змінна)\fR буде замінено на \fIзначення\fR. Цей параметр можна використовувати декілька разів у одній команді. .IP "\fB\-\-srcdir\fR \fIКАТАЛОГ_ПОЧАТКОВИХ_ДАНИХ\fR" 4 .IX Item "--srcdir КАТАЛОГ_ПОЧАТКОВИХ_ДАНИХ" Встановити базовий каталог для усіх вхідних документів, які вказано у файлі налаштувань \fBpo4a\fR. .Sp Якщо вказано одразу \fIdestdir\fR і \fIsrcdir\fR, пошук вхідних файлів відбуватиметься у таких категоріях, у вказаному порядку: \fIdestdir\fR, поточний каталог і \fIsrcdir\fR. Файли результатів записуються до \fIdestdir\fR, якщо вказано, або до поточного каталогу. .IP "\fB\-\-destdir\fR \fIКАТАЛОГ_ПРИЗНАЧЕННЯ\fR" 4 .IX Item "--destdir КАТАЛОГ_ПРИЗНАЧЕННЯ" Встановити базовий каталог для усіх вихідних документів, які вказано у файлі налаштувань \fBpo4a\fR (див. \fB\-\-srcdir\fR вище). .SS "Параметри для внесення змін до заголовка \s-1POT\s0" .IX Subsection "Параметри для внесення змін до заголовка POT" .IP "\fB\-\-porefs\fR \fIтип\fR" 4 .IX Item "--porefs тип" Вказує формат посилань. Аргумент \fIтип\fR може мати значення \fBnever\fR, якщо не слід взагалі створювати посилань; \fBfile\fR, якщо слід вказати файл без номерів рядків; \fBcounter\fR, якщо слід замінити номер рядка значенням лічильника; і \fBfull\fR, якщо посилання слід включити повністю (типове значення: full). .IP "\fB\-\-wrap\-po\fR \fBno\fR|\fBnewlines\fR|\fIчисло\fR (типове значення: 76)" 4 .IX Item "--wrap-po no|newlines|число (типове значення: 76)" Визначає спосіб перенесення рядків у файлі po. Так можна вибрати між файлами із добре перенесеними рядками, які можуть спричиняти конфлікти у git, та файлами, які простіше обробляються автоматично, але є важчими для читання. .Sp Так історично склалося, що комплект програм gettext виконує переформатування файлів po так, щоб рядки було перенесено на 77\-й позиції, з косметичних міркувань. За допомогою цього параметра можна встановити відповідну поведінку po4a. Якщо встановлено числове значення, po4a переноситиме рядки у файлі po після вказаної позиції і після символів розриву рядка у самих рядках. Якщо встановити значення \fBnewlines\fR, po4a розриватиме рядки у msgid і msgstr лише після символів нового рядка у вмісті. Якщо встановити значення \fBno\fR, po4a не переноситиме рядки у файлі po взагалі. Перенесення рядків у коментарях виконується завжди інструментами gettext, які програма використовує на внутрішньому рівні. .Sp Зауважте, що цей параметр не стосується того, яким чином переноситимуться рядки у msgid і msgstr, тобто того, у який спосіб до цих рядків додаватимуться символи розриву рядків. .IP "\fB\-\-master\-language\fR" 4 .IX Item "--master-language" Мова файлів, які містять документ для перекладу. Зауважте, що усі основні документи мають належати до однієї мови. .IP "\fB\-\-msgid\-bugs\-address\fR \fIадреса@електронної.пошти\fR" 4 .IX Item "--msgid-bugs-address адреса@електронної.пошти" Встановити адресу для звітування щодо помилок у msgid (початкових неперекладених рядках). Типово, у створених файлах \s-1POT\s0 не буде полів Report-Msgid-Bugs-To. .IP "\fB\-\-copyright\-holder\fR \fIрядок\fR" 4 .IX Item "--copyright-holder рядок" Встановити запис авторських прав у заголовку POTr. Типовим значенням є «Free Software Foundation, Inc.» .IP "\fB\-\-package\-name\fR \fIрядок\fR" 4 .IX Item "--package-name рядок" Встановити назву пакунка для заголовка \s-1POT.\s0 Типовою є назва пакунка «PACKAGE». .IP "\fB\-\-package\-version\fR \fIрядок\fR" 4 .IX Item "--package-version рядок" Встановити версію пакунка для заголовка \s-1POT.\s0 Типовим є запис «VERSION». .SS "Параметри для внесення змін до файлів \s-1PO\s0" .IX Subsection "Параметри для внесення змін до файлів PO" .IP "\fB\-\-msgmerge\-opt\fR \fIпараметри\fR" 4 .IX Item "--msgmerge-opt параметри" Додаткові параметри для \fBmsgmerge\fR(1). .Sp Зауваження: \fB\f(CB$lang\fB\fR буде розгорнуто до запису поточної мови. .IP "\fB\-\-no\-previous\fR" 4 .IX Item "--no-previous" Цей параметр вилучає \fB\-\-previous\fR з параметрів, які передаються \fBmsgmerge\fR. За його допомогою реалізовано підтримку версій \fBgettext\fR до 0.16. .IP "\fB\-\-previous\fR" 4 .IX Item "--previous" Цей параметр додає \fB\-\-previous\fR до параметрів, які передаються \fBmsgmerge\fR. Щоб ним можна було скористатися, у системі має бути встановлено \fBgettext\fR 0.16 або новішу версію. Цей параметр типово задіяно. .SH "ФАЙЛ НАЛАШТУВАНЬ" .IX Header "ФАЙЛ НАЛАШТУВАНЬ" po4a потрібен аргумент із назвою файла налаштувань. Цей файл має містити такі елементи: .IP "\(bu" 4 Шлях до файлів \s-1PO\s0 і список наявних мов проєкту; .IP "\(bu" 4 Необов'язково, деякі загальні параметри і так звані альтернативи налаштувань, які використовуються як шаблони для налаштовування обробки окремих основних файлів; .IP "\(bu" 4 Список усіх основних документів, які слід перекладати, разом із специфічними для них параметрами. .PP В усіх рядках міститься запис команди у квадратних дужках, за яким вказано параметри. Коментарі починаються з символу «#» і завершуються кінцем рядка. Ви можете екранувати кінець рядка і поділити команду на декілька рядків. .PP На цій сторінці представлено декілька повних прикладів. Інші приклади можна знайти у каталозі \f(CW\*(C`t/cfg\*(C'\fR пакунка із початковим кодом програми. .SS "Пошук файлів \s-1PO\s0 і \s-1POT\s0" .IX Subsection "Пошук файлів PO і POT" Найпростішим рішенням є явне визначення шляху до файлів \s-1POT\s0 та \s-1PO,\s0 ось так: .PP .Vb 1 \& [po4a_paths] man/po/project.pot de:man/po/de.po fr:man/po/fr.po .Ve .PP Тут ми спочатку вказуємо шлях до файла \s-1POT,\s0 а потім шляхи до файлів \s-1PO\s0 перекладів німецькою та французькою мовами. .PP Те саме можна записати для зменшення ризику помилок при копіюванні ось так: .PP .Vb 2 \& [po4a_langs] fr de \& [po4a_paths] man/po/project.pot $lang:man/po/$lang.po .Ve .PP Компонент \f(CW$lang\fR буде автоматично розгорнути на основі наданого списку мов. Це зменшить ризик помилки під час вставляння при додаванні нової мови перекладу. .PP Зробити той самий запис компактнішим можна надавши шлях до каталогу, у якому міститься проєкт з перекладу. Приклад наведено нижче. .PP .Vb 1 \& [po_directory] man/po/ .Ve .PP У вказаному каталозі має міститися набір файлів \s-1PO,\s0 назви яких слід записувати у форматі \fI\s-1XX\s0.po\fR, де \f(CW\*(C`XX\*(C'\fR — код мови перекладу за \s-1ISO 639\-1.\s0 У каталозі також має зберігатися один файл \s-1POT\s0 із суфіксом назви \f(CW\*(C`.pot\*(C'\fR. Для першого запуску цей файл може бути порожнім, але має існувати (po4a не може визначити назву, якою слід скористатися перед суфіксом). .PP Зауважте, що слід вибрати лише один з варіантів, \f(CW\*(C`po_directory\*(C'\fR або \f(CW\*(C`po4a_paths\*(C'\fR. Перший (\f(CW\*(C`po_directory\*(C'\fR) є компактнішим, зменшує ризик помилки під час копіювання, але примушує вас до використання очікуваної структури проєкту та назв файлів. Другий (\f(CW\*(C`po4a_paths\*(C'\fR) є більш явним, ймовірно, зручнішим для читання, радимо користуватися ним, якщо ви налаштовуєте ваш перший проєкт у po4a. .PP \fIЦентралізовані чи поділені файли \s-1PO\s0?\fR .IX Subsection "Централізовані чи поділені файли PO?" .PP Типово, po4a створює по одному файлу \s-1PO\s0 для кожної мови перекладу. У цих файлах міститиметься увесь ваш проєкт перекладу. Зі зростанням вашого проєкту розмір цих файлів може стати проблемою. При використанні weblate можна встановити для кожного з повідомлень перекладу (тобто msgid) пріоритетність, тому варто встановити її так, щоб важливі рядки було перекладено першими, але деякі команди перекладачів, попри це, можуть просити про поділ даних на декілька файлів. .PP Щоб створити один файл \s-1PO\s0 для кожного основного файла, вам слід просто скористатися рядком \f(CW$master\fR у назві ваших файлів \s-1PO\s0 у рядку \f(CW\*(C`[po4a_paths]\*(C'\fR, як це показано нижче. .PP .Vb 1 \& [po4a_paths] doc/$master/$master.pot $lang:doc/$master/$lang.po .Ve .PP Якщо використати цей рядок, po4a створюватиме окремі файли \s-1POT\s0 і \s-1PO\s0 для кожного документа, який слід перекласти. Наприклад, якщо у вас є 3 документи та 5 мов, буде створено 3 файли \s-1POT\s0 та 15 файлів \s-1PO.\s0 Назви для цих файлів буде вибрано за шаблоном \f(CW\*(C`po4a_paths\*(C'\fR, а \f(CW$master\fR буде замінено на базову назву кожного документа, який слід перекласти. Якщо виникне конфлікт назв, ви можете вказати файл \s-1POT,\s0 який слід використати, так, як це показано нижче, за допомогою параметра \f(CW\*(C`pot = \*(C'\fR. .PP Цією можливістю також можна скористатися для групування декількох перекладених файлів до одного файла \s-1POT.\s0 У наведеному нижче прикладі буде створено лише 2 файли \s-1POT:\s0 \fIl10n/po/foo.pot\fR (що містить матеріал з \fIfoo/gui.xml\fR) і \fIl10n/po/bar.pot\fR (що містить матеріал з \fIbar/gui.xml\fR і \fIbar/cli.xml\fR). .PP .Vb 5 \& [po4a_langs] de fr ja \& [po4a_paths] l10n/po/$master.pot $lang:l10n/po/$master.$lang.po \& [type: xml] foo/gui.xml $lang:foo/gui.$lang.xml pot=foo \& [type: xml] bar/gui.xml $lang:bar/gui.$lang.xml pot=bar \& [type: xml] bar/cli.xml $lang:bar/cli.$lang.xml pot=bar .Ve .PP У режимі поділу \fBpo4a\fR будує тимчасову збірку під час оновлення файлів \s-1PO,\s0 щоб розподілити переклади між усіма файлами \s-1PO.\s0 Якщо буде виявлено два файли \s-1PO\s0 із різними перекладами одного і того самого рядка, \fBpo4a\fR позначить переклад рядка як неточний і надішле обидва переклади до усіх файлів \s-1PO,\s0 які містять цей рядок. Коли перекладач оновлюватиме переклад і вилучить позначку неточного перекладу у одному з файлів \s-1PO,\s0 переклад цього рядка буде оновлено у всіх інших файлах \s-1PO\s0 автоматично. .SS "Визначення документів для перекладу" .IX Subsection "Визначення документів для перекладу" Вам слід також вказати список документів, які має бути перекладено. Для кожного основного файла вам слід вказати обробник формату, розташування перекладеного документа, який слід створити, та, необов'язково, додаткові налаштування. Ось приклад: .PP .Vb 5 \& [type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \e \& de:doc/de/mein_kram.sgml \& [type: man] script fr:doc/fr/script.1 de:doc/de/script.1 \& [type: docbook] doc/script.xml fr:doc/fr/script.xml \e \& de:doc/de/script.xml .Ve .PP Втім, знову, ці складні рядки важко читати і редагувати, наприклад, додавати нову мову. Набагато простіше перевпорядкувати речі за допомогою шаблона \f(CW$lang\fR ось так: .PP .Vb 3 \& [type: sgml] doc/my_stuff.sgml $lang:doc/$lang/my_stuff.sgml \& [type: man] script.1 $lang:po/$lang/script.1 \& [type: docbook] doc/script.xml $lang:doc/$lang/script.xml .Ve .SS "Визначення параметрів" .IX Subsection "Визначення параметрів" Ви можете вказати два типи параметрів: \fIпараметри po4a\fR є типовими значенням параметрів командного рядка po4a, а \fIпараметри форматування\fR використовуються для зміни поведінки засобів обробки форматування. За допомогою \fIпараметрів po4a\fR, наприклад, ви можете вказати у вашому файлі налаштувань типове значення параметра командного рядка \fB\-\-keep\fR 50% замість 80%. \fIПараметри форматування\fR документовано на окремих сторінках кожного з модулів обробки форматування, наприклад, \fBLocale::Po4a::Xml\fR\|(3pm). Ви можете, наприклад, передати \fBnostrip\fR до засобу обробки \s-1XML\s0 наказ не обрізати пробіли навколо видобутих рядків. .PP Ви можете передати ці параметри для певного основного файла або навіть для певного перекладу цього файла за допомогою \f(CW\*(C`opt:\*(C'\fR і \f(CW\*(C`opt_XX:\*(C'\fR для мови \f(CW\*(C`XX\*(C'\fR. У наступному прикладі параметр \fBnostrip\fR передається обробнику \s-1XML\s0 (для усіх мов), а пороговий відсоток перекладу зменшено до 0% для перекладу французькою (тобто визначено, що цей переклад зберігатиметься завжди). .PP .Vb 1 \& [type:xml] toto.xml $lang:toto.$lang.xml opt:"\-o nostrip" opt_fr:"\-\-keep 0" .Ve .PP За будь\-яких умов, ці фрагменти налаштувань має бути розташовано наприкінці рядка. Оголошення файлів мають бути першими, далі мають бути додатки, якщо такі є (див. нижче), а лише потім має бути вказано параметри. Групування фрагментів налаштувань не є дуже важливим, оскільки на внутрішньому рівні елементи буде поєднано як рядки. Наступні приклади є еквівалентними: .PP .Vb 3 \& [type:xml] toto.xml $lang:toto.$lang.xml opt:"\-\-keep 20" opt:"\-o nostrip" opt_fr:"\-\-keep 0" \& [type:xml] toto.xml $lang:toto.$lang.xml opt:"\-\-keep 20 \-o nostrip" opt_fr:"\-\-keep 0" \& [type:xml] toto.xml $lang:toto.$lang.xml opt:\-\-keep opt:20 opt:\-o opt:nostrip opt_fr:\-\-keep opt_fr:0 .Ve .PP Зауважте, що специфічні для мов параметри не використовуватимуться при збиранні файла \s-1POT.\s0 Наприклад, не можна передати \fBnostrip\fR обробнику лише для збирання французького перекладу, оскільки той самий файл \s-1POT\s0 використовується для оновлення у кожній з мов. Тому єдині параметри, які можуть бути специфічними для мови, є параметри, які буде використано для створення перекладених документів, наприклад параметр \f(CW\*(C`\-\-keep\*(C'\fR. .PP \fIАльтернативи налаштувань\fR .IX Subsection "Альтернативи налаштувань" .PP Щоб передати ті самі параметри для декількох файлів, варто створити альтернативний тип у наведений нижче спосіб. У наступному прикладі, \f(CW\*(C`\-\-keep 0\*(C'\fR передається для усіх перекладів італійською за допомогою типу \f(CW\*(C`test\*(C'\fR, який є розширенням типу \f(CW\*(C`man\*(C'\fR. .PP .Vb 2 \& [po4a_alias:test] man opt_it:"\-\-keep 0" \& [type: test] man/page.1 $lang:man/$lang/page.1 .Ve .PP Ви також можете розширити наявний тип повторним використанням тієї самої назви як альтернативної у наведений нижче спосіб. Такі оголошення не вважаються помилковими рекурсивними оголошеннями. .PP .Vb 2 \& [po4a_alias:man] man opt_it:"\-\-keep 0" \& [type: man] man/page.1 $lang:man/$lang/page.1 .Ve .PP \fIЗагальні типові параметри\fR .IX Subsection "Загальні типові параметри" .PP Ви також можете скористатися рядками \f(CW\*(C`[options]\*(C'\fR для визначення параметрів, які має бути використано для усіх файлів, незалежно від типу. .PP .Vb 1 \& [options] \-\-keep 20 \-\-option nostrip .Ve .PP Як і з параметрами командного рядка, ви можете скорочувати записи параметрів, які передаються через файл налаштувань: .PP .Vb 1 \& [options] \-k 20 \-o nostrip .Ve .PP \fIПріоритетність параметрів\fR .IX Subsection "Пріоритетність параметрів" .PP Параметри для усіх джерел буде поєднано. Це забезпечить просте перевизначення типових значень специфічними параметрами. Порядок визначення є таким: .IP "\(bu" 4 Рядки \f(CW\*(C`[options]\*(C'\fR задають типові значення, які може бути перевизначено у будь\-якому іншому джерелі. .IP "\(bu" 4 Альтернативні типи, які використано. Специфічні для мов параметри перевизначають параметри, які застосовуються для усіх мов. .IP "\(bu" 4 Параметри, які є специфічними для вказаного основного файла, перевизначають як типові параметри, так і параметри, які походять із визначень альтернативних типів. У цьому випадку, так само, специфічні для мови параметри перевизначають загальні. .IP "\(bu" 4 Нарешті, параметри, які задаються командним рядком \fBpo4a\fR мають вищий пріоритет за будь\-які параметри з файла налаштувань. .PP \fIПриклад\fR .IX Subsection "Приклад" .PP Ось приклад, який демонструє те, як екранувати пробіли і лапки: .PP .Vb 1 \& [po_directory] man/po/ \& \& [options] \-\-master\-charset UTF\-8 \& \& [po4a_alias:man] man opt:"\-o \e"mdoc=NAME,SEE ALSO\e"" \& [type:man] t\-05\-config/test02_man.1 $lang:tmp/test02_man.$lang.1 \e \& opt:"\-k 75" opt_it:"\-L UTF\-8" opt_fr:\-\-verbose .Ve .SS "Додаток: додавання даних до перекладу" .IX Subsection "Додаток: додавання даних до перекладу" Якщо вам потрібно додати додатковий розділ до вашого перекладу, наприклад, вказати у ньому подяки перекладачу, вам слід визначити додаток у рядку, який визначає ваш основний файл. Будь ласка, зверніться до сторінки підручника (man) \fBpo4a\fR\|(7), щоб дізнатися більше про синтаксис файлів додатків. .PP .Vb 2 \& [type: pod] script fr:doc/fr/script.1 \e \& add_fr:doc/l10n/script.fr.add .Ve .PP Використовувати шаблони мов можна так: .PP .Vb 2 \& [type: pod] script $lang:doc/$lang/script.1 \e \& add_$lang:doc/l10n/script.$lang.add .Ve .PP Якщо додаток не вдасться застосувати, переклад буде відкинуто. .PP \fIМодифікатори для оголошення додатка\fR .IX Subsection "Модифікатори для оголошення додатка" .PP Модифікатори додатків можуть спростити файл налаштувань, якщо додатки надаються не для усіх мов або якщо список додатків для різних мов є різним. Модифікатор — одинарний символ, який вказують перед назвою файла. .IP "\fB?\fR" 2 .IX Item "?" Включити \fIшлях_до_додатка\fR, якщо цей файл існує, інакше, не робити нічого. .IP "\fB@\fR" 2 .IX Item "@" \&\fIшлях_до_додатків\fR не є звичайним файлом додатка, а є файлом, що містить список додатків, по одному на рядок. Перед записом кожного з додатків може бути вказано модифікатори. .IP "\fB!\fR" 2 .IX Item "!" \&\fIшлях_до_додатків\fR відкидається, він не завантажується, його не буде завантажено будь\-якою подальшою специфікацією додатків. .PP Вказана нижче інструкція призводить до включення додатка для усіх мов, але лише якщо такий додаток існує. Якщо додатка не існує, програма не повідомлятиме про це додатково. .PP .Vb 1 \& [type: pod] script $lang:doc/$lang/script.1 add_$lang:?doc/l10n/script.$lang.add .Ve .PP Наведений нижче код включає список додатків для будь\-якої мови: .PP .Vb 1 \& [type: pod] script $lang:doc/$lang/script.1 add_$lang:@doc/l10n/script.$lang.add .Ve .SS "Фільтрування перекладених рядків" .IX Subsection "Фільтрування перекладених рядків" Іноді, може виникнути потреба в усуванні частини рядків з перекладу. Для цього ви можете передати параметр \f(CW\*(C`pot_in\*(C'\fR для вашого основного файла з метою визначення назви файла, який буде використано замість основного при побудові файла \s-1POT.\s0 Ось приклад: .PP .Vb 3 \& [type:docbook] book.xml \e \& pot_in:book\-filtered.xml \e \& $lang:book.$lang.xml .Ve .PP У прикладі, рядки для перекладу буде видобуто з файла \fIbook\-filtered.xml\fR (який має бути створено до виклику \fBpo4a\fR), а перекладені файли буде створено з файла \fIbook.xml\fR. У результаті, усі рядки, які є частиною файла \fIbook.xml\fR, але не є частиною \fIbook\-filtered.xml\fR не буде включено до файлів \s-1PO,\s0 а отже, перекладачі не витрачатимуть час на переклад цих рядків. Тому ці рядки лишатимуться незмінними і у перекладених документах. Це, звичайно ж, знизить рівень перекладеності документа, тому вам слід скористатися параметром \f(CW\*(C`\-\-keep\*(C'\fR для забезпечення створення перекладених документів навіть для неповних перекладів. .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ" .IX Header "ТАКОЖ ПЕРЕГЛЯНЬТЕ" \&\fBpo4a\-gettextize\fR\|(1), \fBpo4a\fR\|(7). .SH "АВТОРИ" .IX Header "АВТОРИ" .Vb 3 \& Denis Barbier \& Nicolas François \& Martin Quinson (mquinson#debian.org) .Ve .SH "АВТОРСЬКІ ПРАВА ТА ЛІЦЕНЗУВАННЯ" .IX Header "АВТОРСЬКІ ПРАВА ТА ЛІЦЕНЗУВАННЯ" © \s-1SPI,\s0 inc., 2002–2022. .PP Ця програма є вільним програмним забезпеченням; ви можете поширювати її і/або вносити до неї зміни за умов дотримання \s-1GPL\s0 (див. файл \s-1COPYING\s0).