PO4A(1p) | Po4a Алати | PO4A(1p) |
po4a - у једном кораку ажурира и PO фајлове и преведене документе
po4a [опције] конфиг_фајл
po4a (PO for anything [PO за било шта]) олакшава одржавање превода докумената употребом класичних gettext алата. Главна особина po4a је да раскида везу између садржаја превода и структуре његовог документа. Молимо да погледате страницу po4a(7) у којој је изложен прости увод у овај пројекат.
Када по први пут покренете програм po4a, само са конфигурационим фајлом и документима који треба да се преведу (такозваним мастер документима), он ће креирати POT фајл (који се такође зове и шаблон превода) који садржи све преводиве стрингове у документу дате у облику који преводиоцима олакшава рад.
Ови POT фајлови могу или да се преведу одређеним едитором као што је GNOME Translation Editor, KDE-ов Lokalize или poedit, или могу да се интегришу у платформу за локализацију на мрежи као што су weblate или pootle. Резултат превода је скуп PO фајлова, по један за сваки језик.
Када програм po4a покренете заједно са мастер документима и са PO фајловима, он креира преведене документе уметањем превода садржаја (који се проналази у PO фајловима) у структуру оригиналног мастер документа.
Ако су се у међувремену мастер документи изменили, po4a ће сагласно са тим да измени PO и POT фајлове, тако да преводиоци једноставно могу да открију измене и ажурирају свој рад. У зависности од ваших подешавања po4a ће или да одбаци делимично преведене документе, или ће да направи документ мешајући енглески (за нове или измењене пасусе) и циљни језик (за пасусе за које у PO фајлу већ постоји превод).
Подразумевано се преведени документи израђују онда када је барем 80% њиховог садржаја преведено (погледајте опцију --keep испод). Одбацивање превода чим проценат преведених стрингова није 100% може да буде обесхрабрујуће за преводиоце, док приказивање „превода” који је далеко од завршеног може да представља проблем за крајње кориснике.
мастер документи ------+-------->-------->---------+ (писање док) | | V (po4a извршавања) >-----+--> преводи | | | постојећи PO фајлови -->--> ажурирани PO фајлови >-+ | ^ | | | V | +----------<---------<------------+ ^ (ручни процес превођења) | | додатак -->----------------------------------------------+
Мастер документе креирају писци документације. Програм po4a било какве измене у њима аутоматски рефлектује у PO фајлове, које преводиоци затим ажурирају. Све измене у PO фајловима (било ручне, било оне које направи po4a), аутоматски се рефлектују у преведена документа. Овај процес можете да опонашате употребом po4a-updatepo(1) и po4a-translate(1) скрипти у makefiles, али то брзо постаје незграпно и понављајуће (погледајте po4a(7)). Стога се топло препоручује да у свом процесу изградње користите програм po4a.
Подразумевано понашање (када није наведено --force) је као што следи:
Такође, превод се регенерише само у случају када је његов мастер документ, PO фајл, један од његових додатака или конфигурациони фајл новији. Како би се спречио покушај регенерације превода који не пролазе тест потребног минималног процента завршетка (погледајте --keep), може да се креира фајл са .po4a-stamp екстензијом (погледајте --stamp).
У случају да мастер документ укључује фајлове, требало би да користите заставицу --force јер се време модификације ових фајлова не узима обзир.
PO фајлови се увек регенеришу сагласно POT фајлу са msgmerge -U.
Напомена: ово само активира креирање .po4a-stamp фајлова. Печат фајлови се увек користе ако постоје, и могу да се обришу помоћу --rm-translations или када се фајл комплетно преведе.
УПОЗОРЕЊЕ: ова заставица на прилично драстичан начин мења понашање програма po4a: ваши преведени фајлови се уопште неће ажурирати све док се превод не побољша. Користите ову заставицу само у случају да вам више одговара да достављате застарели превод документације него да достављате прецизну али непреведену документацију.
Ако су наведени и циљнидир и изворнидир, улазни фајлови се траже у следећим директоријумима, према редоследу: циљнидир, текући директоријум и изворнидир. Излазни фајлови се записују у циљнидир ако је наведен, или у текући директоријум.
Раније је gettext свита програма реформатирала po фајлове на 77ој колони ради лепшег изгледа. Ова опција одрешује понашање програма po4a. Ако се постави на нумеричку вредност, po4a ће да обавије po након колоне под тим бројем и након прелома линија у садржају. Ако се постави на newlines, po4a ће само да раздели msgid и msgstr након прелома линија у садржају. Ако се постави на no, po4a уопште неће да обавија po фајл. gettext алати које интерно користимо увек обавијају референтне коментаре.
Имајте на уму да ова опција не утиче на то како се msgid и msgstr обавијају, тј. на то како се додају преломи линија у садржај ових стрингова.
Напомена: $lang ће да се развије у текући језик.
Програм po4a очекује конфигурациони фајл као свој аргумент. Овај фајл мора да садржи следеће елементе:
Све линије садрже команду унутар великих заграда, иза које следе њени параметри. Коментари почињу карактером '#' и протежу се до краја линије. Можете да означите крај линије како бисте развукли команду на неколико линија.
На овој страници су приказани неки комплетни примери, док остале можете да пронађете у "t/cfg" директоријуму дистрибуције изворног кода.
Најједноставније решење је да се експлицитно зада путања до POT и PO фајлова, као што следи:
[po4a_paths] man/po/project.pot de:man/po/de.po fr:man/po/fr.po
Ово најпре наводи путању до POT фајла, а затим путање до немачких и француских PO фајлова.
Да би се умањио ризик грешака приликом копирања/постављања, исте информације могу да се запишу на следећи начин:
[po4a_langs] fr de [po4a_paths] man/po/project.pot $lang:man/po/$lang.po
$lang компонента се аутоматски развија помоћу наведене листе језика, чиме се смањује ризик грешке при копирању/налепљивању онда када се додаје нови језик.
Исте информације можете додатно да скратити навођењем само путање директоријума који садржи ваш пројекат превода, као што следи.
[po_directory] man/po/
Наведени директоријум мора да садржи скуп PO фајлова, сваки назван XX.po где је "XX" ISO 639-1 језика који се користи у том фајлу. Директоријум такође мора да садржи један POT фајл, са ".pot" екстензијом фајла. Приликом првог покретања овај фајл може да буде празан, али мора да постоји (po4a не може да погоди име које треба да користи испред екстензије).
Имајте на уму да морате изабрати само једно од "po_directory" и "po4a_paths". Прво ("po_directory") је компактније, додатно умањује ризик грешака приликом копирања/убацивања, али вас приморава да користите очекивану структуру пројекта, као и имена фајлова. Друго ("po4a_paths"), је експлициније, вероватно и читљивије, и пожељно да се користи када подешавате свој први пројекат са po4a.
Централизовани или подељени PO фајлови?
Програм po4a подразумевано креира један јединствени PO фајл за сваки циљни језик, који садржи комплетан садржај вашег пројекта превода. Како ваш пројекат расте, величина ових фајлова може да постане проблематична. Када се користи веблејт, могуће је да се наведу приоритети за сваки сегмент превода (тј. msgid) тако да се прво преведу они битнији. Ипак, неки преводилачки тимови радије деле садржај на неколико фајлова.
Ако желите да имате један PO фајл за сваки мастер фајл, потребно је само да користите стринг $master у имену ваших PO фајлова у "[po4a_paths]" линији, као што следи.
[po4a_paths] doc/$master/$master.pot $lang:doc/$master/$lang.po
Ако постоји конфликт са именима јер више фајлова има идентичан назив, име мастер фајла може да се наведе додавањем опције "master:file="име:
[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 master:file=foo-gui [type: xml] bar/gui.xml $lang:bar/gui.$lang.xml master:file=bar-gui
У подељеном режиму, програм po4a креира привремени компендијум током ажурирања PO фајлова, како би се делили преводи из свих PO фајлова. Ако два PO files фајла имају различите преводе за исти стринг, програм po4a ће да означи стринг као fuzzy и поставиће оба превода у све PO фајлове који садрже тај стринг. Када преводилац уклони fuzzy ознаку и изабере један од превода, тај превод се аутоматски користи у сваком PO фајлу.
Такође морате да наведете листу докумената који треба да се преведу. За сваки мастер фајл морате да наведете који парсер формата ће да се користи, локацију произведеног преведеног документа, и необавезно, нека подешавања. Ево примера:
[type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \ 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 \ de:doc/de/script.xml
Али опет, читање и измена ових компликованих линија није једноставна, нпр. када се додаје нови језик. Много је једноставније да се ствари реорганизују употребом $lang шаблона као што следи:
[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
Постоје два типа опција: po4a опције су подразумеване вредности за опције командне линије програма po4a док се формат опције користе за промену понашања парсера формата. Као po4a опције бисте могли на пример да у свом конфигурационом фајлу наведете да је подразумевана вредност параметра командне линије --keep 50% уместо 80%. Формат опције су документоване на одређеној страници сваког модула за парсирање, нпр. Locale::Po4a::Xml(3pm). На пример, могли бисте да XML парсеру проследите nostrip како не би уклонио размаке око стрингова које пронађе.
Ове опције можете да проследите одређеном мастер фајлу, или чак одређеном преводу тог фајла употребом "opt:" и "opt_XX:" за језик "XX". У наредном примеру, опција nostrip се прослеђује XML парсеру (за све језике), док се граница за француски превод спушта на 0% (дакле, увек се задржава).
[type:xml] toto.xml $lang:toto.$lang.xml opt:"-o nostrip" opt_fr:"--keep 0"
У сваком случају, ови сегменти конфигурације морају да се нађу на крају линије. Најпре мора да дође декларација фајлова, затим додатак ако постоји (погледајте испод), па тек онда опције. Груписање сегмената конфигурације није толико битно, јер се интерно елементи спајају као стрингови. Следећи примери су сви еквивалентни међусобно:
[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
Имајте на уму да се опције специфичне за језик не користе када се изграђује POT фајл. Тако је, на пример, немогуће да се nostrip проследи парсеру само када се изграђује француски превод, јер се исти POT фајл користи за ажурирање сваког језика. Дакле, једине опције које могу да буду специфичне за језик су оне које се користе када се прави превод, као што је опција "--keep".
Конфигурациони алијаси
Када желите да се исте опције проследе већем броју фајлова, најбоље је да дефинишете алијас типа, на начин како је објашњено у наставку. У следећем примеру, "--keep 0" се прослеђује сваком италијанском преводу употребом типа "test", који је проширење типа "man".
[po4a_alias:test] man opt_it:"--keep 0" [type: test] man/page.1 $lang:man/$lang/page.1
Постојећи тип такође можете да проширите поновним коришћењем истог имена за алијас, као што следи. То се не интерпретира као погрешна рекурзивна дефиниција.
[po4a_alias:man] man opt_it:"--keep 0" [type: man] man/page.1 $lang:man/$lang/page.1
Глобалне подразумеване опције
"[options]" линије можете такође да употребите за дефинисање опција које морају да се користе за све фајлове, без обзира на њихов тип.
[options] --keep 20 --option nostrip
Као и са опцијама командне линије, и у конфигурационом фајлу можете да скратите параметре који се прослеђују:
[options] -k 20 -o nostrip
Приоритет опција
Опције свих извора се спајају, чиме се једноставно обезбеђује да детаљније опције могу преиначити подразумеване вредности. Редослед је као што следи:
Пример
Ево примера који показује на који начин се обележавају размаци и знаци навода:
[po_directory] man/po/ [options] --master-charset UTF-8 [po4a_alias:man] man opt:"-o \"mdoc=NAME,SEE ALSO\"" [type:man] t-05-config/test02_man.1 $lang:tmp/test02_man.$lang.1 \ opt:"-k 75" opt_it:"-L UTF-8" opt_fr:--verbose
Ако желите да превод допуните додатним одељком, не пример, да изјавите захвалност преводиоцу, онда морате да дефинишете додатак линији која дефинише ваш мастер фајл. Молимо вас да погледате страницу po4a(7) како би сазнали више детаља у вези синтаксе фајлова додатака.
[type: pod] script fr:doc/fr/script.1 \ add_fr:doc/l10n/script.fr.add
Такође можете да употребите језичке шаблоне на начин који следи:
[type: pod] script $lang:doc/$lang/script.1 \ add_$lang:doc/l10n/script.$lang.add
У случају да додатак не може да се примени превод се одбацује.
Модификатори за декларацију додатка
Модификатори додатка могу да поједноставе конфигурациони фајл у случају када сви језици не нуде додатак, или када се листа додатака мења од језика до језика. Модификатор је један карактер који се налази испред имена фајла.
Оно што следи укључује додатак у било који језик, али само у случају да постоји. Ако додатак не постоји, не пријављује се грешка.
[type: pod] script $lang:doc/$lang/script.1 add_$lang:?doc/l10n/script.$lang.add
Оно што следи укључује листу додатака за сваки језик:
[type: pod] script $lang:doc/$lang/script.1 add_$lang:@doc/l10n/script.$lang.add
Понекад неке стрингове желите да сакријете од процеса превођења. У том циљу, вашем мастер фајлу можете да додате параметар "pot_in" када се изграђује POT file. Ево примера:
[type:docbook] book.xml \ pot_in:book-filtered.xml \ $lang:book.$lang.xml
Са овим подешавањем, стрингови који треба да се преведу биће извучени из book-filtered.xml (који мора да се креира пре позивања програма po4a) док ће преведени фајлови да се изграде из book.xml. Као резултат, било који стринг који је део book.xml али се не налази у book-filtered.xml неће постати део PO фајлова, чиме се преводиоци спречавају да их преведу. Тако да ће ови стрингови остати неизмењени када се буде креирали преведени документи. Наравно да ово смањује ниво преведености, тако да ће вам вероватно бити потребна опција "--keep" како би обезбедили да се документи ипак креирају.
ДАЉИРАД: Да ли је овај одељак заиста користан?
Претпоставимо да одржавате програм под именом foo који има man страницу man/foo.1 која се природно одржава само на енглеском језику. Сада ви као узводни или низводни одржавалац желите да креирате и одржавате превод. Најпре програмом po4a-gettextize(1) морате да креирате POT фајл који обавезно мора да се пошаље преводиоцима.
Тако да бисмо у нашем случају позвали
cd man && po4a-gettextize -f man -m foo.1 -p foo.pot
Затим бисте овај фајл послали одговарајућим језичким листама или га понудили за преузимање негде на свом вебсајту.
Претпоставимо сада да сте пре следећег издања програма примили три превода: de.po (заједно са додатком de.add), sv.po и pt.po. Пошто не желите да мењате свој Makefile (или више њих) сваки пут када вам стигне нови превод, можете да у свом Makefile искористите програм po4a са погодним конфигурационим фајлом. Назовимо га po4a.cfg. У нашем примеру би то изгледало овако:
[po_directory] man/po4a/po/ [type: man] man/foo.1 $lang:man/translated/$lang/foo.1 \ add_$lang:?man/po4a/add_$lang/$lang.add opt:"-k 80"
У овом примеру се претпоставља да би све ваше генерисане man странице (и сви PO и фајлови додатака) требало да се чувају у man/translated/$lang/ (респективно у man/po4a/po/ и man/po4a/add_$lang/) под текућим директоријумом. У нашем примеру би директоријум man/po4a/po/ укључивао de.po, pt.po и sv.po, а директоријум man/po4a/add_de/ би укључивао de.add.
Приметите употребу модификатора ? јер додатак долази само уз немачки превод (de.po).
Да бисте заиста изградили преведене man странице тада бисте (једном!) додали следећу линију у build циљ одговарајућег Makefile:
po4a po4a.cfg
Једном када је ово постављено више не морате да дирате Makefile када стигне нови превод, нпр. ако вам француски тим пошаље fr.po и fr.add ви их једноставно сместите у man/po4a/po/ и man/po4a/add_fr/ респективно, па када се програм следећи пут изгради, аутоматски ће да се изгради и француски превод и смести у man/translated/fr/.
Имајте на уму да вам је и даље потребан одговарајући циљ да инсталирате локализоване странице приручника, заједно са енглеским.
Коначно,
ако не
сместите
генерисане
фајлове у
ваш систем
за
контролу
верзија,
биће вам
потребна и
линија у
вашем clean
циљу:
-rm -rf man/translated
po4a-gettextize(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a(7).
Дени Барбије <barbier@linuxfr.org> Никола Франсоа <nicolas.francois@centraliens.net> Мартин Квинсон (mquinson#debian.org)
Права умножавања 2002-2020 by SPI, inc.
Овај програм је слободан софтвер; можете да га редистрибуирате и/или мењате под условима GPL (погледајте фајл COPYING).
2020-12-09 | Po4a Алати |