PO4A-GETTEXTIZE(1p) | Po4a Алати | PO4A-GETTEXTIZE(1p) |
po4a-gettextize - конверзија оригиналног фајла (и његових превода) у PO фајл
po4a-gettextize -f fmt -m master.doc [-l XX.doc] -p XX.po
(XX.po је излаз, све остало су улази)
po4a (PO for anything [PO за било шта]) олакшава одржавање превода докумената употребом класичних gettext алата. Главна особина po4a је да раскида везу између садржаја превода и структуре његовог документа. Молимо да погледате страницу po4a(7) у којој је изложен прости увод у овај пројекат.
Скрипта po4a-gettextize је задужена за конверзију фајлова документације у PO фајлове. Потребна вам је само да поставите ваш пројекат превођења са програмом po4a, никад касније.
Ако почињете из почетка, po4a-gettextize ће да издвоји преводиве стрингове из документације и записаће POT фајл. У случају да заставицом -l наведете претходно постојећи преведени фајл, po4a-gettextize ће покушати да искористи преводе које он садржи и креираће PO фајл. Овај процес остаје захтеван и мора ручно да се уради, као што је објашњено у одељку 'Конвертовање ручног превода у po4a пројекат' ниже.
Ако мастер документ садржи не-ASCII карактере, ново генерисани PO фајл ће бити кодиран у UTF-8. Иначе (у случају када је мастер документ потпуно написан ASCII карактерима), генерисани PO ће да употреби кодирање преведеног улазног документа, или UTF-8 ако се преведени документ не наведе.
po4a-gettextize ће покушати да издвоји садржај било ког датог фајла превода, и искористиће тај садржај као msgstr у креираном PO фајлу. Имајте на уму да је овај процес врло осетљив: Нти стринг преведеног фајла би требало да буде превод Нтог стринга у оригиналу. Наравно да ово неће функционисати ако оба фајла немају потпуно исту структуру.
Интерно, сваки po4a парсер пријављује синтактични тип сваког издвојеног стринга. На тај начин се откривају десинхронизације током gettextизације. На пример, ако фајлови имају следећу структуру, мало је вероватно да је 4ти стринг у преводу (типа 'chapter') превод 4тог стринга у оригиналу (типа 'paragraph'). Више је вероватно да је оригиналу додат нови пасус, или да су у преводу два пасуса из оригинала спојена.
Оригинал Превод chapter chapter paragraph paragraph paragraph paragraph paragraph chapter chapter paragraph paragraph paragraph
po4a-gettextize ће детаљно да дијагностицира било какву откривену десинхронизацију структуре. Када се то догоди, требало би ручно да уредите фајлове (то вероватно захтева да познајете неке основе циљног језика). Морате да додате лажне пасусе или да уклоните неки садржај у једном од докумената (или у оба) како би исправили пријављене диспаритете, све док се структуре оба документа саршено не поклопе. Неки од трикова за то су дати у наредном одељку.
Ча ки када је документ успешно обрађен, и даље су могуће тихе грешке и неоткривени диспаритети. Због тога је сваки превод који је аутоматски доделио po4a-gettextize обележен као fuzzy чиме се захтева ручна људска инспекција. Мора да се провери да ли је сваки прибављен msgstr заиста и превод придруженог msgid, а не стринга пре или после.
Као што можете да видите, кључна ствар овде је да преведени и оригинални документ имају потпуно исту структуру. Најбоље је када се ради gettextизација тачно оне верзије документа master.doc који је употребљен за превод, и да се PO фајл ажурира у односу на најновији мастер фајл једном када gettextизација успе.
Ако имате довољно среће да вам се структуре фајлова савршено поклапају, изградња исправног PO фајла траје неколико секунди. У супротном, врло брзо ћете разумети зашто овај процес има тако ружно име :) Али запамтите да је овај гломазан посао цена која мора да се плати како би се након тога добио комфор који омогућава програм po4a. Онда када се конверзија обави, синхронизација између мастер докумената и превода ће увек бити потпуно аутоматска.
Чак и када ствари крену по злу, gettextизација остаје бржа од поновног превођења свега. Успео сам да одрадим gettextiзацију постојећег француског превода комплетне Perl документације за један дан упркос томе што је структура многих докумената била десинхронизована. То је било више од 2 мегабајта оригиналног текста (2 милиона карактера): поновно започињање превода из почетка би захтевало неколико месеци рада.
Чим се открије десинхронизација, gettextизација се прекида. Теоретски, вероватно би било могуће да се gettextизација ресинхронизује касније у документу употребом нпр. истог алгоритма који користи и diff(1) алат. Али ручна интервенција би и даље била обавезна да би се ручно подударили елементи који нису могли аутоматски да се подударе, чиме се објашњава зашто аутоматска ресинхронизација (још?) није имплементирана.
Када се то догоди, све се своди на поновно поравнавање ових проклетих структура фајлова кроз ручно уређивање. po4a-gettextize је прилично детаљан у вези тога шта је кренуло погрешно. Он пријављује стрингове који се не подударају, њихове позиције у тексту, и тип сваког од њих. Уз то, PO фајл који је до тада генерисан се избацује као gettextization.failed.po како бисте могли даље да истражујете.
Ево неких осталих трикова који могу да вам помогну у овом заморном процесу:
Слично, два пасуса могу у POD фајлу да се споје у један када раздвајајућа линија садржи неке размаке, или када нема празне линије између =item линије и садржаја ставке.
Ова несрећна ситуација се дешава када се исти пасус понавља по документу. У том случају се у PO фајлу не прави нова ставка, већ се постојећој ставки додаје нова референца.
Дакле, претходна листуација се дешава када се сва слична али ипак различита пасуса преведу на потпуно исти начин. Очигледно, то ће да уклони пасус из превода. Да бисте решили проблем, довољно је да на једном од превода у документу начините ситну измену. А можда вам више одговара да избаците други пасус из оригиналног документа.
С друге стране, ако се исти пасус који се појављује у оригиналном документу двапут не преведе идентично на обе локације, имаћете утисак да је један пасус оригиналног документа једноставно испарио. Само ископирајте најбољи превод преко оног другог у преведеном документу и решићете проблем.
На пример, првом позиву po4a-updatepo француског превода Perl документације (PO фајл величине 5.5 MБ) је требало око 48 сати (да, два дана) док су наредни трајали само десетак секунди.
po4a(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 Алати |