.\" 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 7" .TH PO4A 7 "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 \- радни оквир за превод документације и осталог материјала .SH "Увод" .IX Header "Увод" po4a (\s-1PO\s0 for anything [\s-1PO\s0 за било шта]) олакшава одржавање превода докумената употребом класичних gettext алата. Главна особина po4a је да раскида везу између садржаја превода и структуре његовог документа. .PP Овај документ служи као увод у po4a који се обраћа потенцијалним корисницима који разматрају да ли да употребе овај алат и радозналима који желе да разумеју зашто су ствари онакве какве су. .SH "Зашто po4a?" .IX Header "Зашто po4a?" Филозофија Слободног Софтвера је да се технологија заиста учини доступном свима. Али лиценцирање није једина брига: непреведени слободни софтвер је бескористан корисницима који не говоре енглески језик. Стога, имамо да одрадимо још посла како би софтвер био доступан свима. .PP Многи пројекти су добро разумели ову ситуацију и сада су сви убеђени у неопходност превођења свега. Ипак, само превођење представља огроман напор многих појединаца, отежан малим техничким потешкоћама. .PP На сву срећу, софтвер Отвореног Кода се уствари врло добро преводи употребом gettext свите алата. Они се користе за издвајање стрингова који треба да се преведу и за њихово представљање у стандардизованом формату (који се зове \s-1PO\s0 фајлови, или каталози превода). Појавио се читав екосистем алата који помажу преводиоцима да заиста преведу ове \s-1PO\s0 фајлове. gettext у време извршавања користи резултат превођења да крајњим корисницима прикаже преведене поруке. .PP Што се тиче документације, ситуација је још увек донекле разочаравајућа. На први поглед превођење документације може да изгледа лакше него превођење програма, јер се чини да је само потребно да ископирате изворни фајл документације и почнете да преводите садржај. Међутим, када се оригинална документација измени, праћење промена се брзо претвара у ноћну мору за преводиоце. Ако се ради ручно, овај задатак је непријатан и склон грешкама. .PP Застарели преводи су често гори од ситуације када уопште нема превода. Крајњи корисницу могу да буду заварани документацијом која описује старо понашање програма. Уз то, они не могу да имају директну интеракцију са одржаваоцима јер не говоре енглески језик. А одржаваоци такође не могу да поправе проблем јер не знају сваки језик на који је њихова документација преведена. Ове потешкоће, које су често последица лошег избора алата, могу да поткопају мотивацију преводиоца волонтера, чиме се проблем додатно погоршава. .PP \&\fBЦиљ po4a пројекта је да олакша рад преводиоцима документације\fR. Тачније, он омогућава \fIодржавање\fR превода документације. .PP Идеја је да се искористи и прилагоди gettext приступ овом пољу. Као са gettext, текстови се издвајају из својих оригиналних локација и представљају преводиоцима као \s-1PO\s0 каталози превода. Преводиоци могу да искористе класичне gettext алате да прате рад који треба да се уради, сарађују и да се организују у тимове. po4a затим умеће преводе директно у структуру документације и тако прави преведене изворне фајлове који могу да се обраде и дистрибуирају на исти начин као и енглески фајлови. Сваки пасус који није преведен остаје на енглеском у излазном документу, па се на тај начин обезбеђује да крајњи корисници никада не виде застарели превод у документацији. .PP Ово аутоматизује већину незгодног посла у одржавању превода. Откривање пасуса које је потребно освежити постаје веома једноставно и процес је потпуно аутоматизован када је редослед елемента преуређен без даљих измена. Такође може да се користи и одређена верификација како би се умањила могућност грешака форматирања због којих би се документ искварио. .PP Молимо да такође погледате и \fBЧПП\fR ниже у овом документу да бисте видели комплетнију листу добрих и лоших страна овог приступа. .SS "Подржани формати" .IX Subsection "Подржани формати" Тренутно је овај приступ успешно имплементиран на неколико врста формата за форматирање текста: .IP "man (стабилни парсер)" 4 .IX Item "man (стабилни парсер)" Стари добри формат за стране приручника који користи велики број програма. Овде је po4a подршка веома добродошла јер је овај формат донекле компликован за коришћење и уопште није погодан за почетнике. .Sp Модул \fBLocale::Po4a::Man\fR\|(3pm) такође подржава и mdoc формат који користе \s-1BSD\s0 man стране (оне су такође прилично уобичајене и на Linux системима). .IP "AsciiDoc (стабилан парсер)" 4 .IX Item "AsciiDoc (стабилан парсер)" Ово је једноставан формат за обележавање који је намењен за поједностављивање писања документације. На пример, коришћен је за документовање git система. Те man стране су преведене уз помоћ po4a. .Sp За још детаља, погледајте Locale::Po4a::AsciiDoc. .IP "pod (стабилни парсер)" 4 .IX Item "pod (стабилни парсер)" Ово је Perl Online Documentation формат. Сам језик и његова проширења су документовани употребом овог формата заједно са већином постојећих Perl скрипти. Он олакшава држање документације близу кода који описује уграђујући их заједно у исти фајл. Чини живот програмера једноставнијим, али на несрећу не и преводиочев. Све док не почнете да користите po4a. .Sp За више детаља, погледајте Locale::Po4a::Pod. .IP "sgml (стабилни парсер)" 4 .IX Item "sgml (стабилни парсер)" Чак и ако је данас превазиђен са \s-1XML\s0 форматом, овај формат се и даље користи за документе који су дугачки више од неколико екрана. Чак може да се користи и за комплетне књиге. Ажурирање докумената ове дужине може да буде прилично изазовно. \fBdiff\fR се често показује бескорисним када је увлачење оригиналног текста поново урађено након ажурирања. На сву срећу, po4a може да вам помогне након тог процеса. .Sp Тренутно су подржани само DebianDoc и DocBook \s-1DTD\s0 описи, али додавање подршке за неки нови је заиста једноставно. Чак је могуће да се употреби po4a на непознатом \s-1SGML DTD\s0 без измене кода достављајући неопходне информације преко командне линије. Погледајте \fBLocale::Po4a::Sgml\fR\|(3pm) за више детаља. .IP "TeX / LaTeX (стабилни парсер)" 4 .IX Item "TeX / LaTeX (стабилни парсер)" LaTeX формат је главни формат документације који се користи у свету Слободног Софтвера као и за публикације. .Sp Модул \fBLocale::Po4a::LaTeX\fR\|(3pm) је тестиран са Python документацијом, књигом и неким презентацијама. .IP "text (стабилни парсер)" 4 .IX Item "text (стабилни парсер)" Text формат је базни формат за многе друге формате који укључују дугачке блокове текста, укључујући Markdown, fortunes, \s-1YAML\s0 одељак пре главног текста, debian/changelog, и debian/control. .Sp Ово подржава уобичајене формате који се користе за Генераторе Статичког Сајта, ПРОЧИТАЈМЕ, и остале системе документације. Погледајте \fBLocale::Po4a::Text\fR\|(3pm) за више детаља. .IP "xml и \s-1XHMTL\s0 (вероватно стабилан парсер)" 4 .IX Item "xml и XHMTL (вероватно стабилан парсер)" \&\s-1XML\s0 формат је базни формат за многе формате документације. .Sp po4a тренутно подржава DocBook \s-1DTD\s0 (погледајте \fBLocale::Po4a::Docbook\fR\|(3pm) за више детаља) и \s-1XHTML.\s0 .IP "BibTex (вероватно стабилан парсер)" 4 .IX Item "BibTex (вероватно стабилан парсер)" Формат BibTex се користи уз LaTex за форматирање листи референци (библиографије). .Sp За више детаља, погледајте Locale::Po4a::BibTex. .IP "Docbook (вероватно стабилан парсер)" 4 .IX Item "Docbook (вероватно стабилан парсер)" Језик означавања заснован на \s-1XML\s0 који за описивање докумената користи семантичке ознаке. .Sp За више детаља, погледајте Locale::Po4a:Docbook. .IP "Guide \s-1XML\s0 (вероватно стабилан парсер)" 4 .IX Item "Guide XML (вероватно стабилан парсер)" \&\s-1XML\s0 формат документације. Овај модул је специјално развијен као помоћ за подршку и одржавање превода Gentoo Linux документације све до барем марта 2016 (како каже Wayback Machine). Од тада се Gentoo пребацио на DevBook \s-1XML\s0 формат. .Sp За више детаља, погледајте Locale::Po4a:Guide. .IP "Wml (вероватно стабилан парсер)" 4 .IX Item "Wml (вероватно стабилан парсер)" Web Markup Language, немојте да помешате \s-1WML\s0 са \s-1WAP\s0 протоколом који се користи на мобилним телефонима. Овај модул се ослања на Xhtml модул, који се са своје стране ослања на XmL модул. .Sp За више детаља, погледајте . .IP "Yaml (вероватно стабилан парсер)" 4 .IX Item "Yaml (вероватно стабилан парсер)" Стриктни надскуп \s-1JSON. YAML\s0 се често користи за пројекте система или конфигурације. \s-1YAML\s0 је језгро за Ansible компаније Red Hat. .Sp За више детаља, погледајте Locale::Po4a::Yaml. .IP "RubyDoc (вероватно стабилан парсер)" 4 .IX Item "RubyDoc (вероватно стабилан парсер)" Формат Ruby Document (\s-1RD\s0), у почетку подразумевани формат документације за Ruby и Ruby пројекте пре конверзије у RDoc 2002. године. Мада изгледа да јапанска верзија Ruby референтног приручника још увек користи \s-1RD.\s0 .Sp За више детаља, погледајте Locale::Po4a::RubyDoc. .IP "Halibut (вероватно експериментални парсер)" 4 .IX Item "Halibut (вероватно експериментални парсер)" Систем документације са елементима који личе на TeX, debiandoc-sgml, TeXinfo и остале, развио је Сајмон Татам, програмер програма PuTTY. .Sp За више детаља, погледајте Locale::Po4a:Halibut. .IP "Ini (вероватно експериментални парсер)" 4 .IX Item "Ini (вероватно експериментални парсер)" Формат фајла за конфигурацију који је MS-DOS учинио популарим. .Sp За више детаља, погледајте Locale::Po4a::Ini. .IP "texinfo (врло експериментални парсер)" 4 .IX Item "texinfo (врло експериментални парсер)" Сва \s-1GNU\s0 документација је написано у овом формату (то је чак један од захтева да се постане званичан \s-1GNU\s0 пројекат). Подршка за \fBLocale::Po4a::Texinfo\fR\|(3pm) у po4a је и даље на почетку. Молимо да пријавите багове и поднесете захтеве за новим могућностима. .IP "Остали подржани формати" 4 .IX Item "Остали подржани формати" Po4a такође може да обради и ређе или специјализоване формате, као што је документација опција компилације 2.4+ Linux кернела (Locale::Po4a::KernelHelp) или дијаграми које производи алат dial (Locale::Po4a:Dia). Додавање нових формата је често веома једноставно и главни задатак је да се изађе са парсером за ваш циљни формат. Погледајте \fBLocale::Po4a::TransTractor\fR\|(3pm) за више информација у вези овога. .IP "Неподржани формати" 4 .IX Item "Неподржани формати" Нажалост, po4a још нема подршку за неколико формата документације. Подршка за многе од њих би се лако додала у po4a. То укључује формате који се не користе само за документацију, као што су описи пакета (deb и rpm), питања у скриптама за инсталацију пакета, дневници измена пакета, и сво специјализовани фајл формати које користе програми као што су сценарија за игре или wine ресурс фајлови. .SH "Употреба po4a" .IX Header "Употреба po4a" У почетку, po4a је био изграђен око четири скрипте, од којих свака испуњава одређени задатак. \fBpo4a\-gettextize\fR\|(1) помаже код иницијалног успостављања превода и опционално, при конвертовању постојећих пројеката превода у po4a. \fBpo4a\-updatepo\fR\|(1) рефлектује промене на оригиналној документацији у одговарајуће po фајлове. \fBpo4a\-translate\fR\|(1) изграђује преведени изворни фајл из оригиналног фајла и одговарајућег \s-1PO\s0 фајла. Уз то, \fBpo4a\-normalize\fR\|(1) је углавном корисна за отклањање грешака у po4a парсерима, јер производи непреведени документ из оригиналног. Она олакшава да се уоче омашке које уноси процес парсирања. .PP Most projects only require the features of \fBpo4a\-updatepo\fR\|(1) and \fBpo4a\-translate\fR\|(1), but these scripts proved to be cumbersome and error prone to use. If the documentation to translate is split over several source files, it is difficult to keep the \s-1PO\s0 files up to date and build the documentation files correctly. As an answer, a all-in-one tool was provided: \fBpo4a\fR\|(1). This tool takes a configuration file describing the structure of the translation project: the location of the \s-1PO\s0 files, the list of files to translate, and the options to use, and it fully automates the process. When you invoke \fBpo4a\fR\|(1), it both updates the \s-1PO\s0 files and regenerate the translation files that need to. If everything is already up to date, \fBpo4a\fR\|(1) does not change any file. .PP Остатак овог одељка даје преглед начина употребе интерфејса скрипти у po4a. Већина корисника ће вероватно радије да користи све\-у\-једном алат који је описан документацији за \fBpo4a\fR\|(1). .SS "Графички преглед po4a скрипти" .IX Subsection "Графички преглед po4a скрипти" Схема која следи даје преглед начина на који свака po4a скрипта може да се користи. Овде је \fIмастер.doc\fR име дато као пример документације која треба да се преведе; \fI\s-1XX\s0.doc\fR је тај исти документ преведен на језик \s-1XX\s0 док је \fIdoc.XX.po\fR каталог превода за тај документ на језику \s-1XX.\s0 Аутори документације ће углавном да се баве са \fIмастер.doc\fR (што може да буде manстрана, \s-1XML\s0 документ, asciidoc фајл или нешто слично); преводиоци ће углавном да се фокусирају на \s-1PO\s0 фајл, док ће крајњи корисници да виде само фајл \fI\s-1XX\s0.doc\fR. .PP .Vb 10 \& мастер.doc \& | \& V \& +<\-\-\-\-\-<\-\-\-\-+<\-\-\-\-\-<\-\-\-\-\-<\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\->\-\-\-\-\-\-\-\->\-\-\-\-\-\-\-+ \& : | | : \&{превођење} | { ажурирање мастер.doc } : \& : | | : \& XX.doc | V V \&(опционално) | мастер.doc \->\-\-\-\-\-\-\-\->\-\-\-\-\-\->+ \& : | (нови) | \& V V | | \& [po4a\-gettextize] doc.XX.po \-\->+ | | \& | (стари) | | | \& | ^ V V | \& | | [po4a\-updatepo] | \& V | | V \& превод.pot ^ V | \& | | doc.XX.po | \& | | (fuzzy) | \& { превођење } | | | \& | ^ V V \& | | {ручно уређивање} | \& | | | | \& V | V V \& doc.XX.po \-\-\->\-\-\-\->+<\-\-\-<\-\- doc.XX.po додатак мастер.doc \& (иницијални) (ажуриран) (опционално) (ажуриран) \& : | | | \& : V | | \& +\-\-\-\-\->\-\-\-\-\->\-\-\-\-\->\-\-\-\-\-\-> + | | \& | | | \& V V V \& +\-\-\-\-\-\->\-\-\-\-\-+\-\-\-\-\-\-<\-\-\-\-\-\-+ \& | \& V \& [po4a\-translate] \& | \& V \& XX.doc \& (ажуриран) .Ve .PP Ова схема је компликована, али у пракси, једном када се пројекат постави и конфигурише, користи се само њен десни део (који укључује \fBpo4a\-updatepo\fR\|(1) и \fBpo4a\-translate\fR\|(1)). .PP Леви део приказује како \fBpo4a\-gettextize\fR\|(1) може да се употреби за конверзију постојећег пројекта превода у po4a инфраструктуру. Ова скрипта узима оригинални документ и његов документ његовог превода, па покушава да изгради одговарајући \s-1PO\s0 фајл. Таква ручна конверзија је прилично незграпна (за више детаља, погледајте \fBpo4a\-gettextize\fR\|(1) документацију), али је неопходно да се обави само једном како би се конвертовали ваши постојећи преводи. Ако немате никакве преводе за конверзију, можете да заборавите на све ово и да се фокусирате на десни део схеме. .PP У врху десног дела је приказана акција оригиналног аутора, освежавање документације. Средњи десни део приказује аутоматизоване акције скрипте \fBpo4a\-updatepo\fR\|(1). Нови материјал се издваја и пореди са постојећим преводом. За делове који се нису изменили користиће се претходни превод, док се делимично измењени делови повезују са претходним преводом помоћу „fuzzy” ознаке која означава да превод мора да се ажурира. Нови или доста измењени материјал се оставља непреведен. .PP Затим, \fIручно уређивање\fR означава акцију преводилаца, који мењају \s-1PO\s0 фајлове како би обезбедили преводе за сваки оригинални стринг и пасус. Ово може да се обави било употребом специјализованог едитора као што је \fB\s-1GNOME\s0 Translation Editor\fR, KDE\-ов \fBLokalize\fR или \fBpoedit\fR, било употребом платформе за локализацију на мрежи као што је \fBweblate\fR или \fBpootle\fR. Резултат превода је скуп \s-1PO\s0 фајлова, по један за сваки језик. За више детаља, молимо вас погледајте gettext документацију. .PP Доњи део слике приказује како \fBpo4a\-translate\fR\|(1) креира преведени изворни документ из \fIмастер.doc\fR оригиналног документа и \fIdoc.XX.po\fR каталога превода који су преводиоци ажурирали. Поново се искоришћава структура документа, док се оригинални садржај замењује својим одговарајућим преводом. Необавезно, може да се употреби додатак како би се превод допунио неким додатним текстом. Ово се често користи да се дода име преводиоца финалном документу. Погледајте ниже за још детаља. .PP Као што је напоменуто раније, програм \fBpo4a\fR\|(1) комбинује у један позив ефекте одвојених скрипти, ажурирање \s-1PO\s0 фајлова и преведеног документа. Основна логика остаје неизмењена. .SS "Започињање новог превода" .IX Subsection "Започињање новог превода" Ако користите \fBpo4a\fR\|(1), нема неког посебног корака да се започне превод. Потребно је само да наведете језике у конфигурационом фајлу, и недостајући \s-1PO\s0 фајлови се аутоматски креирају. Наравно, тада преводилац мора да обезбеди преводе за сав садржај који постоји у вашим документима. \fBpo4a\fR\|(1) такође креира \s-1POT\s0 фајл, то јест фајл \s-1PO\s0 шаблона. Потенцијални преводиоци могу да преведу ваш пројекат на нови језик тако што промене име овом фајлу и напишу превод на свој језик. .PP Ако бисте радије да користите индивидуалне скрипте, требало би да на начин као што следи употребите \fBpo4a\-gettextize\fR\|(1) и креирате \s-1POT\s0 фајл. Овај фајл затим може да се копира у \fI\s-1XX\s0.po\fR и тако започне нови превод. .PP .Vb 1 \& $ po4a\-gettextize \-\-format <формат> \-\-master <мастер.doc> \-\-po <превод.pot> .Ve .PP Мастер документ се користи као улаз, док је \s-1POT\s0 фајл излаз овог процеса. .SS "Интегрисање измена на оригиналном документу" .IX Subsection "Интегрисање измена на оригиналном документу" За ово се користи скрипта \fBpo4a\-updatepo\fR\|(1) (за детаље, молимо да погледате њену документацију): .PP .Vb 1 \& $ po4a\-updatepo \-\-format <формат> \-\-master <нови_мастер.doc> \-\-po <стари_doc.XX.po> .Ve .PP Мастер документ се користи као улаз, док се \s-1PO\s0 фајл ажурира: он је уједно и улаз и излаз. .SS "Генерисање преведеног документа" .IX Subsection "Генерисање преведеног документа" Једном када завршите са превођењем, хоћете да добијете преведену документацију и да је дистрибуирате корисницима заједно уз оригиналну. Да бисте то урадили, употребите програм \fBpo4a\-translate\fR\|(1) на следећи начин: .PP .Vb 1 \& $ po4a\-translate \-\-format <формат> \-\-master <мастер.doc> \-\-po \-\-localized .Ve .PP И мастер и \s-1PO\s0 фајлови се користе као улаз, док је локализовани фајл излаз овог процеса. .SS "Употреба додатака за додавање додатног текста преводима" .IX Subsection "Употреба додатака за додавање додатног текста преводима" Додавање новог текста преводу је вероватно једина ствар која је једноставнија на дуже стазе у случају када фајлове преводите ручно :). Ове се дешава када желите да додате допунски одељак преведеном документу, који не одговара никаквом садржају оригиналног документа. Класични случај употребе је за одавање признања преводилачком тиму, као и да се наведе начин за пријаву проблема који се тичу превода. .PP Са po4a, морате да наведете \fBдодатак\fR фајлове, на које концептуално може да се гледа као на закрпе које се примењују над локализованим документом након обраде. Сваки додатак мора да се достави као посебан фајл, чији формат је међутим, веома различит у односу на класичне закрпе. Прва линија је \fIлинија заглавља\fR, која дефинише тачку уметања додатка (нажалост са криптичном синтаксом \*(-- погледајте ниже) док се остатак фајла умеће дословно на одређену позицију. .PP Линија заглавља мора да почне са стрингом \fB\s-1PO4A\-HEADER:\s0\fR, након чега следи листа \fIкључ\fR\fB=\fR\fIвредност\fR поља раздвојених са тачка запета знацима. .PP На пример, следеће заглавље декларише додатак који мора да се постави на сам крај превода. .PP .Vb 1 \& PO4A\-HEADER: mode=eof .Ve .PP Ствари постају компликованије када додатни садржај желите да поставите у средину документа. Наредно заглавље декларише додатак који у превод мора да се постави након \s-1XML\s0 одељка који садржи стринг \f(CW\*(C`У вези овог документа\*(C'\fR. .PP .Vb 1 \& PO4A\-HEADER: position=У вези овог документа; mode=after; endboundary= .Ve .PP У пракси, када покушава да примени додатак, програм po4a тражи прву линију која задовољава \f(CW\*(C`position\*(C'\fR аргумент (то може да буде регизраз). Не заборавите да po4a овде разматра \fBпреведени\fR документ. Ова документација је на српском језику, али ваша линија би вероватно требало да изгледа као што следи, у случају да намеравате да свој додатак уметнете у француски превод. .PP .Vb 1 \& PO4A\-HEADER: position=À propos de ce document; mode=after; endboundary= .Ve .PP Онда када се у циљном документу пронађе \f(CW\*(C`position\*(C'\fR, програм po4a тражи следећу линију након \f(CW\*(C`position\*(C'\fR која се подудара са наведеним \f(CW\*(C`endboundary\*(C'\fR. Додатак се умеће непосредно \fBиза\fR те линије (јер смо задали \fIendboundary\fR, тј. границу на којој се завршава текући одељак). .PP Потпуно исти ефекат би могао да се добије следећим еквивалентним заглављем: .PP .Vb 1 \& PO4A\-HEADER: position=У вези овог документа; mode=after; beginboundary=
.Ve .PP Овде програм po4a тражи у преводу прву линију која се подудара са \f(CW\*(C` након линије која се подудара са \f(CW\*(C`У вези овог документа\*(C'\fR, и умеће додатак \fBиспред\fR те линије, јер смо задали \fIbeginboundary\fR, тј. границу која означава почетак наредног одељка. Тако да ова линија заглавља захтева да се додатак постави иза одељка који садржи \f(CW\*(C`У вези овог документа\*(C'\fR, и обавештава програм po4a да одељка започиње линијом која садржи ознаку \f(CW\*(C`. Ово је еквивалентно са претходним примером јер, у суштини, оно што заиста желите је да уметнете овај додатак иза \f(CW\*(C`/section\*(C'\fR> или испред \f(CW\*(C`. .PP Можете такође да поставите режим уметања \fImode\fR на вредност \f(CW\*(C`before\*(C'\fR, са сличном семантиком: комбиновање \f(CW\*(C`mode=before\*(C'\fR са \f(CW\*(C`endboundary\*(C'\fR ће да постави додатак непосредно \fBиза\fR пронађене границе, последње потенцијалне граничне линије испред \f(CW\*(C`position\*(C'\fR. Комбиновање \f(CW\*(C`mode=before\*(C'\fR са \f(CW\*(C`beginboundary\*(C'\fR ће да постави додатак непосредно \fBиспред\fR пронађене границе, последње потенцијалне граничне линије испред \f(CW\*(C`position\*(C'\fR. .PP .Vb 7 \& Режим | Врста границе | Употребљена граница | Место уметања гледано у односу на границу \& ========|===============|=============================|=========================================== \& \*(Aqbefore\*(Aq| \*(Aqendboundary\*(Aq | последња испред \*(Aqposition\*(Aq | Непосредно иза изабране границе \& \*(Aqbefore\*(Aq|\*(Aqbeginboundary\*(Aq| последња испред \*(Aqposition\*(Aq | Непосредно испред изабране границе \& \*(Aqafter\*(Aq | \*(Aqendboundary\*(Aq | прва иза \*(Aqposition\*(Aq | Непосредно иза изабране границе \& \*(Aqafter\*(Aq |\*(Aqbeginboundary\*(Aq| прва иза \*(Aqposition\*(Aq | Непосредно испред изабране границе \& \*(Aqeof\*(Aq | (ништа) | нема | Крај фајла .Ve .PP \fIСавети и трикови у вези додатака\fR .IX Subsection "Савети и трикови у вези додатака" .IP "\(bu" 4 Запамтите да су све ово регуларни изрази. На пример, ако желите да пронађете крај nroff одељка који се завршава са линијом \f(CW\*(C`.fi\*(C'\fR, немојте да користите \f(CW\*(C`.fi\*(C'\fR као \fBendboundary\fR, јер ће то да пронађе \f(CW\*(C`the[ fi]le\*(C'\fR, што очигледно није оно што очекујете. У овом случају, исправна вредност за \fBendboundary\fR је: \f(CW\*(C`^\e.fi$\*(C'\fR. .IP "\(bu" 4 Празни карактери у садржају \f(CW\*(C`position\*(C'\fR и граница СУ БИТНИ. Тако да се наредне две линије \fBразликују\fR. Друга ће да се пронађе само онда када у преведеном документу има довољно празних карактера на крају. .Sp .Vb 2 \& PO4A\-HEADER: position=У вези овог документа; mode=after; beginboundary=
\& PO4A\-HEADER: position=У вези овог документа ; mode=after; beginboundary=
.Ve .IP "\(bu" 4 Мада се може помислити да се ова претрага контекста оквирно врши над сваком линијом \fBпреведеног\fR документа, она се у ствари врши над интерном стрингу података преведеног документа. Овај интерни стринг података може да буде текст који се протеже над пасусом који садржи више линија, или може да буде само једна \s-1XML\s0 ознака. Тачно \fIместо уметања\fR додатка мора да буде пре или након интерног стринга података и не може да се нађе унутар тог стринга података. .IP "\(bu" 4 Да бисте разумели како се додаци умећу у превод, проследите аргумент \fB\-vv\fR програму po4a. Од помоћи је и да покренете програм po4a у дибаг режиму јер тако можете да видите стварне интерне стрингове података у случају када се додатак не примењује. .PP \fIПримери додатака\fR .IX Subsection "Примери додатака" .IP "\(bu" 4 Ако желите да додате нешто након следећег nroff одељка: .Sp .Vb 1 \& .SH "AUTHORS" .Ve .Sp Требало би да изаберете приступ у два корака постављањем \fBmode=after\fR. Затим би требало да сузите претрагу на линију након \fB\s-1AUTHORS\s0\fR регуларним изразом за аргумент \fBposition\fR. Затим би требало да пронађете почетак наредног одељка (нпр. \fB^\e.SH\fR) помоћу регуларног израза за аргумент \fBbeginboundary\fR. Дакле: .Sp .Vb 1 \& PO4A\-HEADER:mode=after;position=AUTHORS;beginboundary=\e.SH .Ve .IP "\(bu" 4 Ако желите да додате нешто непосредно иза одређене линије (нпр. након линије „Права умножавања Велики Даса”), искористите \fBposition\fR које се подудара са том линијом, \fBmode=after\fR и за \fBbeginboundary\fR задајте да се подудара са било којом линијом. .Sp .Vb 1 \& PO4A\-HEADER:mode=after;position=Права умножавања Велики Даса, 2004;beginboundary=^ .Ve .IP "\(bu" 4 Ако желите нешто да додате на крај документа, поставите да се \fBposition\fR подудара са било којом линијом вашег документа (али само са једном линијом. Програм Po4a неће наставити даље ако није једна линија), и поставите да се \fBendboundary\fR не подудара ни са чим. Овде немојте да користите једноставне стрингове као \fB\*(L"\s-1EOF\*(R"\s0\fR, већ радије задајте оне за које је мала вероватноћа да постоје у вашем документу. .Sp .Vb 1 \& PO4A\-HEADER:mode=after;position=У вези овог документа;beginboundary=ЛажнаPo4aГраница .Ve .PP \fIДетаљнији пример\fR .IX Subsection "Детаљнији пример" .PP Оригинални документ (\s-1POD\s0 форматиран): .PP .Vb 7 \& |=head1 NAME \& | \& |dummy \- a dummy program \& | \& |=head1 AUTHOR \& | \& |me .Ve .PP Затим, следећи додатак ће обезбедити да се одељак (на француском) у вези преводиоца дода на крај фајла (на француском \*(L"\s-1TRADUCTEUR\*(R"\s0 значи \*(L"\s-1TRANSLATOR\*(R",\s0 а \*(L"moi\*(R" значи \*(L"me\*(R"). .PP .Vb 6 \& |PO4A\-HEADER:mode=after;position=AUTEUR;beginboundary=^=head \& | \& |=head1 TRADUCTEUR \& | \& |moi \& | .Ve .PP Да бисте уметнули свој додатак испред \s-1AUTHOR,\s0 употребите следеће заглавље: .PP .Vb 1 \& PO4A\-HEADER:mode=after;position=NOM;beginboundary=^=head1 .Ve .PP Ово функционише јер је наредна линија која се подудара са \fBbeginboundary\fR /^=head1/ иза одељка \*(L"\s-1NAME\*(R"\s0 (преведено на \*(L"\s-1NOM\*(R"\s0 у француском), она која наводи ауторе. Дакле, додатак ће да се постави између ова два одељка. Приметите да ако се касније дода још један одељак између \s-1NAME\s0 и \s-1AUTHOR\s0 одељака, програм po4a ће погрешно да постави додатак испред тог новог одељка. .PP Да бисте ово спречили, исти резултат можете да постигнете употребом \fBmode\fR=\fIbefore\fR: .PP .Vb 1 \& PO4A\-HEADER:mode=before;position=^=head1 AUTEUR .Ve .SH "На који начин програм функционише?" .IX Header "На који начин програм функционише?" Ово поглавље ће да вам представи кратак преглед унутрашњих процеса у програму po4a, тако да нам можете са више самопоуздања помоћи да га одржавамо и унапређујемо. Такође може да вам помогне да разумете зашто не ради нешто што очекујете, као и да вам представи начине за решавање ваших проблема у раду са програмом. .PP Архитектура програма po4a је објектно оријентисана. Класа \fBLocale::Po4a::TransTractor\fR\|(3pm) је заједнички предак за све po4a парсере. Ово чудно име је последица чињенице да је она у исто време задужена и за превођење документа и за издвајање стрингова. .PP Формалније речено, она узима документ који треба да се преведе као и \s-1PO\s0 фајл који садржи преводе који треба да се користе као улаз, а генерише два одвојена излаза: други \s-1PO\s0 фајл (произашао као резултат издвајања преводивих стрингова из улазног документа), и преведени документ (са истом структуром као и улазни документ, али са свим преводивим стринговима замењеним садржајем улазног \s-1PO\s0). Ево графичке представе овога: .PP .Vb 6 \& Улазни документ \-\-\e /\-\-\-> Излазни документ \& \e TransTractor:: / (преведен) \& +\-\->\-\- parse() \-\-\-\-\-\-\-\-+ \& / \e \& Улазни PO \-\-\-\-\-\-\-\-/ \e\-\-\-> Излазни PO \& (издвојен) .Ve .PP Ова мала кост је срж целе po4a архитектуре. Ако изоставите улазни \s-1PO\s0 и излазни документ, добијате \fBpo4a\-gettextize\fR. Ако доставите оба улаза и одбаците излазни \s-1PO,\s0 добијате \fBpo4a\-translate\fR. Да би се обезбедило решење у једном кораку, са једним конфигурационим фајлом, програм \fBpo4a\fR позива TransTractor двапут, а између ова два TransTractor позива обавља позив алата \fBmsgmerge \-U\fR. За више детаља, молимо погледајте \fBLocale::Po4a::TransTractor\fR\|(3pm). .SH "Пројекти отвореног кода који користе po4a" .IX Header "Пројекти отвореног кода који користе po4a" Следи веома делимична листа пројеката који за своју документацију у продукцији користе po4a. Ако свој пројекат желите да додате на ову листу, само нам пошаљите мејл (или Merge захтев). .IP "\(bu" 4 adduser (man): алат за управљање корисницима и групама. .IP "\(bu" 4 apt (man, docbook): Debian менаџер пакета. .IP "\(bu" 4 aptitude (docbook, svg): терминалски менаџер пакета за Debian .IP "\(bu" 4 F\-Droid вебсајт (markdown): каталог \s-1FOSS\s0 (Free and Open Source Software) апликација за Андроид платформу које могу да се инсталирају. .IP "\(bu" 4 git (asciidoc): дистрибуирани систем за контролу верзија који служи за праћење измена у изворном коду. .IP "\(bu" 4 Linux manстране (man) .Sp Овај пројекат обезбеђује инфраструктуру за превођење многих manстраница на различите језике, спремне за интеграцију у неколико главних дистрибуција (Arch Linux, Debian и из њега изведене, Fedora). .IP "\(bu" 4 Stellarium (\s-1HTML\s0): бесплатан планетаријум отвореног кода за ваш компјутер. po4a се користи за превод описа небеске културе. .IP "\(bu" 4 Још једна ставка која треба да се среди: .SH "ЧПП" .IX Header "ЧПП" .SS "Како се изговара po4a?" .IX Subsection "Како се изговара po4a?" Ја га лично изговарам као pouah , што је француска ономатопејска реч коју користимо уместо бљак :) Вероватно имам чудан смисао за хумор :) .SS "Шта је са осталим алатима за превођење документације помоћу gettext?" .IX Subsection "Шта је са осталим алатима за превођење документације помоћу gettext?" Има их неколико. Ево вероватно непотпуне листе, са још алата који су близу хоризонта. .IP "\fBpoxml\fR" 4 .IX Item "poxml" Ово је алат који су развили \s-1KDE\s0 људи за обраду DocBook \s-1XML.\s0 Колико ја знам, то је први програм који издваја из документације стрингове за превод у \s-1PO\s0 фајлове, па их након превођења умеће назад. .Sp Он може да ради само са \s-1XML\s0 форматом, и само са одређеним \s-1DTD.\s0 Посебно нисам задовољан начином на који обрађује листе, које на крају постају један велики msgid. Када листа постане велика, залогај постаје тежак за гутање. .IP "\fBpo-debiandoc\fR" 4 .IX Item "po-debiandoc" Овај програм који је урадио Дени Барбије представља неку врсту претече po4a \s-1SGML\s0 модула, који га мање\-више чини застарелим. Као што име говори, он обрађује само DebianDoc \s-1DTD,\s0 што је такође мање\-више застарео \s-1DTD.\s0 .IP "\fBxml2po.py\fR" 4 .IX Item "xml2po.py" Употребљава \s-1GIMP\s0 Тим за документацију од 2004. године, функционише прилично добро упркос томе што, као што име наговештава, ради само са \s-1XML\s0 фајловима и захтева специјално конфигурисане makefile фајлове. .IP "\fBSphinx\fR" 4 .IX Item "Sphinx" За управљање својим преводима, Sphinx Documentation Project такође доста користи gettext. Нажалост, функционише само за неколико текст формата, rest и markdown, мада је вероватно једини алат који то ради управљајући комплетним процесом превођења. .PP Главне предности програма po4a над њима је једноставност уметања додатног садржаја (која је тамо још гора) и могућност постизања gettextизације. .SS "РЕЗИМЕ предности приступа базираног на gettext" .IX Subsection "РЕЗИМЕ предности приступа базираног на gettext" .IP "\(bu" 2 Преводи се не чувају заједно са оригиналом, чиме је омогућено да се открије застарелост превода. .IP "\(bu" 2 Преводи се чувају засебно у одвојеним фајловима, чиме се спречава међусобно ометање преводиоца различитих језика, како током предаје својих закрпа тако и на нивоу кодирања фајла. .IP "\(bu" 2 Интерно је заснован на \fBgettext\fR (мада \fBpo4a\fR нуди веома једноставан интерфејс, тако да не морате разумети унутрашње функционисање да бисте га користили). На тај начин не морамо поново да откријемо рупу на саксији, а из разлога што су ти алати широко распрострањени, можемо претпоставити и да су мање\-више ослобођени багова. .IP "\(bu" 2 За крајње кориснике ништа није промењено (осим чињенице да ће највероватније боље да одржавају преводе). Резултујући фајл документације који се дистрибуира је потпуно исти. .IP "\(bu" 2 Нема потребе да преводиоци уче нову синтаксу фајлова и њихов омиљени едитор \s-1PO\s0 фајлова (као што су Емаксов \s-1PO\s0 режим, Lokalize или Gtranslator) ће сасвим лепо да функционише. .IP "\(bu" 2 gettext обезбеђује једноставан начин за добијање статистика у вези онога што је урађено, онога што треба да се редигује и ажурира, као и онога што је још преостало да се уради. Неки пример може да се пронађе на следећим адресама: .Sp .Vb 2 \& \- https://docs.kde.org/stable5/en/kdesdk/lokalize/project\-view.html \& \- http://www.debian.org/intl/l10n/ .Ve .PP Али није све тако сјајно, овај приступ има и неке лоше стране са којима морамо да се носимо. .IP "\(bu" 2 Додаци су… чудни на први поглед. .IP "\(bu" 2 Преведени текст не можете да прилагодите по свом нахођењу, као на пример, да овде поделите пасус, а онде спојите друга два. Мада у неку руку, ако постоји проблем са оригиналом, то би у сваком случају требало да се пријави као баг. .IP "\(bu" 2 Чак и са једноставним интерфејсом, он је ипак нови алат који људи морају научити како да користе. .Sp Један од мојих снова би био да некако интегришемо po4a у Gtranslator или Lokalize. Када се фајл документације отвори, стрингови се аутоматски издвоје, и преведени фајл + po фајл могу да се упишу на диск. Ако успемо да урадимо \s-1MS\s0 Word (\s-1TM\s0) модул (или макар \s-1RTF\s0) можда би га чак користили и професионални преводиоци. .SH "ПОГЛЕДАЈТЕ ТАКОЂЕ" .IX Header "ПОГЛЕДАЈТЕ ТАКОЂЕ" .IP "\(bu" 4 Документација све\-у\-једном алата који би требало да користите: \fBpo4a\fR\|(1). .IP "\(bu" 4 Документација појединачних po4a скрипти: \fBpo4a\-gettextize\fR\|(1), \fBpo4a\-updatepo\fR\|(1), \fBpo4a\-translate\fR\|(1), \fBpo4a\-normalize\fR\|(1). .IP "\(bu" 4 Додатне помоћне скрипте: \fBmsguntypot\fR\|(1), \fBpo4a\-display\-man\fR\|(1), \fBpo4a\-display\-pod\fR\|(1). .IP "\(bu" 4 Парсери сваког од формата, тачније, да сазнате које опције прихвата сваки од њих: \fBLocale::Po4a::AsciiDoc\fR\|(3pm) \fBLocale::Po4a::Dia\fR\|(3pm), \fBLocale::Po4a::Guide\fR\|(3pm), \fBLocale::Po4a::Ini\fR\|(3pm), \fBLocale::Po4a::KernelHelp\fR\|(3pm), \fBLocale::Po4a::Man\fR\|(3pm), \fBLocale::Po4a::RubyDoc\fR\|(3pm), \fBLocale::Po4a::Texinfo\fR\|(3pm), \fBLocale::Po4a::Text\fR\|(3pm), \fBLocale::Po4a::Xhtml\fR\|(3pm), \fBLocale::Po4a::Yaml\fR\|(3pm), \fBLocale::Po4a::BibTeX\fR\|(3pm), \fBLocale::Po4a::Docbook\fR\|(3pm), \fBLocale::Po4a::Halibut\fR\|(3pm), \fBLocale::Po4a::LaTeX\fR\|(3pm), \fBLocale::Po4a::Pod\fR\|(3pm), \fBLocale::Po4a::Sgml\fR\|(3pm), \fBLocale::Po4a::TeX\fR\|(3pm), \fBLocale::Po4a::Wml\fR\|(3pm), \fBLocale::Po4a::Xml\fR\|(3pm). .IP "\(bu" 4 Имплементација основне инфраструктуре: \fBLocale::Po4a::TransTractor\fR\|(3pm) (од посебне важности за разумевање организације кода), \fBLocale::Po4a::Chooser\fR\|(3pm), \fBLocale::Po4a::Po\fR\|(3pm), \fBLocale::Po4a::Common\fR\|(3pm). Молимо вас да у стаблу изворног кода такође погледате и фајл \fI\s-1CONTRIBUTING\s0.md\fR. .SH "АУТОРИ" .IX Header "АУТОРИ" .Vb 2 \& Дени Барбије \& Мартин Квинсон (mquinson#debian.org) .Ve