
        *****************************************************
        *           GENERATED FILE, DO NOT EDIT             *
        * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
        *****************************************************

This file was generated by po4a(7). Do not store it (in VCS, for example),
but store the PO file used as source file by po4a-translate.

In fact, consider this as a binary, and the PO file as a regular .c file:
If the PO get lost, keeping this translation up-to-date will be harder.

=encoding UTF-8

=head1 ИМЕ

po4a - радни оквир за превод документације и осталог материјала

=head1 Увод

po4a (PO for anything [PO за било шта]) олакшава одржавање превода
докумената употребом класичних gettext алата. Главна особина po4a је да
раскида везу између садржаја превода и структуре његовог документа.

Овај документ служи као увод у po4a који се обраћа потенцијалним корисницима
који разматрају да ли да употребе овај алат и радозналима који желе да
разумеју зашто су ствари онакве какве су.

=head1 Зашто po4a?

Филозофија Слободног Софтвера је да се технологија заиста учини доступном
свима. Али лиценцирање није једина брига: непреведени слободни софтвер је
бескористан корисницима који не говоре енглески језик. Стога, имамо да
одрадимо још посла како би софтвер био доступан свима.

Многи пројекти су добро разумели ову ситуацију и сада су сви убеђени у
неопходност превођења свега. Ипак, само превођење представља огроман напор
многих појединаца, отежан малим техничким потешкоћама.

На сву срећу, софтвер Отвореног Кода се уствари врло добро преводи употребом
gettext свите алата. Они се користе за издвајање стрингова који треба да се
преведу и за њихово представљање у стандардизованом формату (који се зове PO
фајлови, или каталози превода). Појавио се читав екосистем алата који помажу
преводиоцима да заиста преведу ове PO фајлове. gettext у време извршавања
користи резултат превођења да крајњим корисницима прикаже преведене поруке.

Што се тиче документације, ситуација је још увек донекле разочаравајућа.  На
први поглед превођење документације може да изгледа лакше него превођење
програма, јер се чини да је само потребно да ископирате изворни фајл
документације и почнете да преводите садржај. Међутим, када се оригинална
документација измени, праћење промена се брзо претвара у ноћну мору за
преводиоце. Ако се ради ручно, овај задатак је непријатан и склон грешкама.

Застарели преводи су често гори од ситуације када уопште нема
превода. Крајњи корисницу могу да буду заварани документацијом која описује
старо понашање програма. Уз то, они не могу да имају директну интеракцију са
одржаваоцима јер не говоре енглески језик. А одржаваоци такође не могу да
поправе проблем јер не знају сваки језик на који је њихова документација
преведена. Ове потешкоће, које су често последица лошег избора алата, могу
да поткопају мотивацију преводиоца волонтера, чиме се проблем додатно
погоршава.

B<Циљ po4a пројекта је да олакша рад преводиоцима документације>. Тачније,
он омогућава I<одржавање> превода документације.

Идеја је да се искористи и прилагоди gettext приступ овом пољу. Као са
gettext, текстови се издвајају из својих оригиналних локација и представљају
преводиоцима као PO каталози превода. Преводиоци могу да искористе класичне
gettext алате да прате рад који треба да се уради, сарађују и да се
организују у тимове. po4a затим умеће преводе директно у структуру
документације и тако прави преведене изворне фајлове који могу да се обраде
и дистрибуирају на исти начин као и енглески фајлови. Сваки пасус који није
преведен остаје на енглеском у излазном документу, па се на тај начин
обезбеђује да крајњи корисници никада не виде застарели превод у
документацији.

Ово аутоматизује већину незгодног посла у одржавању превода. Откривање
пасуса које је потребно освежити постаје веома једноставно и процес је
потпуно аутоматизован када је редослед елемента преуређен без даљих
измена. Такође може да се користи и одређена верификација како би се умањила
могућност грешака форматирања због којих би се документ искварио.

Молимо да такође погледате и B<ЧПП> ниже у овом документу да бисте видели
комплетнију листу добрих и лоших страна овог приступа.

=head2 Подржани формати

Тренутно је овај приступ успешно имплементиран на неколико врста формата за
форматирање текста:

=over

=item man (стабилни парсер)

Стари добри формат за стране приручника који користи велики број
програма. Овде је po4a подршка веома добродошла јер је овај формат донекле
компликован за коришћење и уопште није погодан за почетнике.

Модул L<Locale::Po4a::Man(3pm)|Man> такође подржава и mdoc формат који
користе BSD man стране (оне су такође прилично уобичајене и на Linux
системима).

=item AsciiDoc (стабилан парсер)

Ово је једноставан формат за обележавање који је намењен за
поједностављивање писања документације. На пример, коришћен је за
документовање git система. Те man стране су преведене уз помоћ po4a.

За још детаља, погледајте L<Locale::Po4a::AsciiDoc>.

=item pod (стабилни парсер)

Ово је Perl Online Documentation формат. Сам језик и његова проширења су
документовани употребом овог формата заједно са већином постојећих Perl
скрипти. Он олакшава држање документације близу кода који описује уграђујући
их заједно у исти фајл. Чини живот програмера једноставнијим, али на несрећу
не и преводиочев. Све док не почнете да користите po4a.

За више детаља, погледајте L<Locale::Po4a::Pod>.

=item sgml (стабилни парсер)

Чак и ако је данас превазиђен са XML форматом, овај формат се и даље користи
за документе који су дугачки више од неколико екрана. Чак може да се користи
и за комплетне књиге. Ажурирање докумената ове дужине може да буде прилично
изазовно. B<diff> се често показује бескорисним када је увлачење оригиналног
текста поново урађено након ажурирања. На сву срећу, po4a може да вам
помогне након тог процеса.

Тренутно су подржани само DebianDoc и DocBook DTD описи, али додавање
подршке за неки нови је заиста једноставно. Чак је могуће да се употреби
po4a на непознатом SGML DTD без измене кода достављајући неопходне
информације преко командне линије. Погледајте L<Locale::Po4a::Sgml(3pm)> за
више детаља.

=item TeX / LaTeX (стабилни парсер)

LaTeX формат је главни формат документације који се користи у свету
Слободног Софтвера као и за публикације.

Модул L<Locale::Po4a::LaTeX(3pm)|LaTeX> је тестиран са Python
документацијом, књигом и неким презентацијама.

=item text (стабилни парсер)

Text формат је базни формат за многе друге формате који укључују дугачке
блокове текста, укључујући Markdown, fortunes, YAML одељак пре главног
текста, debian/changelog, и debian/control.

Ово подржава уобичајене формате који се користе за Генераторе Статичког
Сајта, ПРОЧИТАЈМЕ, и остале системе документације. Погледајте
L<Locale::Po4a::Text(3pm)|Text> за више детаља.

=item xml и XHMTL (вероватно стабилан парсер)

XML формат је базни формат за многе формате документације.

po4a тренутно подржава DocBook DTD (погледајте L<Locale::Po4a::Docbook(3pm)>
за више детаља) и XHTML.

=item BibTex (вероватно стабилан парсер)

Формат BibTex се користи уз LaTex за форматирање листи референци
(библиографије).

За више детаља, погледајте L<Locale::Po4a::BibTex>.

=item Docbook (вероватно стабилан парсер)

Језик означавања заснован на XML који за описивање докумената користи
семантичке ознаке.

За више детаља, погледајте L<Locale::Po4a:Docbook>.

=item Guide XML (вероватно стабилан парсер)

XML формат документације. Овај модул је специјално развијен као помоћ за
подршку и одржавање превода Gentoo Linux документације све до барем марта
2016 (како каже Wayback Machine). Од тада се Gentoo пребацио на DevBook XML
формат.

За више детаља, погледајте L<Locale::Po4a:Guide>.

=item Wml (вероватно стабилан парсер)

Web Markup Language, немојте да помешате WML са WAP протоколом који се
користи на мобилним телефонима. Овај модул се ослања на Xhtml модул, који се
са своје стране ослања на XmL модул.

За више детаља, погледајте <Locale::Po4a::Wml>.

=item Yaml (вероватно стабилан парсер)

Стриктни надскуп JSON. YAML се често користи за пројекте система или
конфигурације. YAML је језгро за Ansible компаније Red Hat.

За више детаља, погледајте L<Locale::Po4a::Yaml>.

=item RubyDoc (вероватно стабилан парсер)

Формат Ruby Document (RD), у почетку подразумевани формат документације за
Ruby и Ruby пројекте пре конверзије у RDoc 2002. године. Мада изгледа да
јапанска верзија Ruby референтног приручника још увек користи RD.

За више детаља, погледајте L<Locale::Po4a::RubyDoc>.

=item Halibut (вероватно експериментални парсер)

Систем документације са елементима који личе на TeX, debiandoc-sgml, TeXinfo
и остале, развио је Сајмон Татам, програмер програма PuTTY.

За више детаља, погледајте L<Locale::Po4a:Halibut>.

=item Ini (вероватно експериментални парсер)

Формат фајла за конфигурацију који је MS-DOS учинио популарим.

За више детаља, погледајте L<Locale::Po4a::Ini>.

=item texinfo (врло експериментални парсер)

Сва GNU документација је написано у овом формату (то је чак један од захтева
да се постане званичан GNU пројекат). Подршка за
L<Locale::Po4a::Texinfo(3pm)|Texinfo> у po4a је и даље на почетку. Молимо да
пријавите багове и поднесете захтеве за новим могућностима.

=item gemtext (врло експериментални парсер)

The native plain text format of the Gemini protocol.  The extension C<.gmi>
is commonly used.  Support for this module in po4a is still in its infancy.
If you find anything, please file a bug or feature request.

=item org (very highly experimental parser)

The document format used by the Org mode.  Support for this module in po4a
is still in its infancy.  If you find anything, please file a bug or feature
request.

=item vimhelp (very highly experimental parser)

The format used for Vim help files (and some third-party plugin
documentation).  Support for this format in po4a is still in its infancy.
If you find anything, please file a bug report or feature request.

=item simplepod (very highly experimental parser)

Similar to the previously mentioned I<pod>, this one adopts the new
L<Pod::Simple> as its parser.  Since it is newly created, some bugs are
expected.  If you notice any strange behavior, please let us know.
Eventually, this module will replace I<pod>.

=item Остали подржани формати

Po4a can also handle some more rare or specialized formats, such as the
documentation of compilation options for the 2.4+ Linux kernels
(L<Locale::Po4a::KernelHelp>) or the diagrams produced by the dia tool
(L<Locale::Po4a::Dia>). Adding a new format is often very easy and the main
task is to come up with a parser for your target format. See
L<Locale::Po4a::TransTractor(3pm)> for more information about this.

=item Неподржани формати

Нажалост, po4a још нема подршку за неколико формата документације. Подршка
за многе од њих би се лако додала у po4a. То укључује формате који се не
користе само за документацију, као што су описи пакета (deb и rpm), питања у
скриптама за инсталацију пакета, дневници измена пакета, и сво
специјализовани фајл формати које користе програми као што су сценарија за
игре или wine ресурс фајлови.

=back

=head1 Употреба po4a

Најједноставнији начин да овај алат употребите у свом пројекту је да
напишете конфигурациони фајл за B<po4a> програм и да онда имате интеракцију
само за овим програмом. Молимо вас да прочитате његову документацију, налази
се у L<po4a(1)>. Остатак овог одељка наводи више детаља битних напредним
корисницима програма po4a који желе да продубе своје разумевање.

=head2 Детаљна схема процеса рада са програмом po4a

Обавезно најпре прочитајте L<po4a(1)> пре овог врло детаљног одељка да бисте
имали упрошћени преглед процеса рада са програмом po4a. Вратите се овде када
желите да погледате застрашујућу комплетну слику, са скоро свим детаљима.

In the following schema, F<master.doc> is an example name for the
documentation to be translated; F<XX.doc> is the same document translated in
the language XX while F<doc.XX.po> is the translation catalog for that
document in the XX language. Documentation authors will mostly be concerned
with F<master.doc> (which can be a manpage, an XML document, an AsciiDoc
file, etc); the translators will be mostly concerned with the PO file, while
the end users will only see the F<XX.doc> file.

Прелази са угластим заградама као што је C<[po4a ажурира po]> представљају
извршавање po4a алата, док прелази са витичастим заградама као што је
C<{ажурирање мастер.doc}> представљају ручну измену фајлова пројекта.

                                   master.doc
                                       |
                                       V
     +<-----<----+<-----<-----<--------+------->-------->-------+
     :           |                     |                        :
{translation}    |          {update of master.doc}              :
     :           |                     |                        :
   XX.doc        |                     V                        V
 (optional)      |                 master.doc ->-------->------>+
     :           |                   (new)                      |
     V           V                     |                        |
  [po4a-gettextize]   doc.XX.po -->+   |                        |
          |            (old)       |   |                        |
          |              ^         V   V                        |
          |              |   [po4a updates po]                  |
          V              |           |                          V
   translation.pot       ^           V                          |
          |              |        doc.XX.po                     |
          |              |         (fuzzy)                      |
    {translation}        |           |                          |
          |              ^           V                          V
          |              |     {manual editing}                 |
          |              |           |                          |
          V              |           V                          V
      doc.XX.po --->---->+<---<-- doc.XX.po    addendum     master.doc
      (initial)                 (up-to-date)  (optional)   (up-to-date)
          :                          |            |             |
          :                          V            |             |
          +----->----->----->------> +            |             |
                                     |            |             |
                                     V            V             V
                                     +------>-----+------<------+
                                                  |
                                                  V
                                     [po4a updates translations]
                                                  |
                                                  V
                                                XX.doc
                                             (up-to-date)

Да поновимо, ова схема је веома компликована. Погледајте L<po4a(1)> да
видите упрошћени преглед.

Леви део приказује како L<po4a-gettextize(1)> може да се употреби за
конверзију постојећег пројекта превода у po4a инфраструктуру. Ова скрипта
узима оригинални документ и његов документ његовог превода, па покушава да
изгради одговарајући PO фајл. Таква ручна конверзија је прилично незграпна
(за више детаља, погледајте L<po4a-gettextize(1)> документацију), али је
неопходно да се обави само једном како би се конвертовали ваши постојећи
преводи. Ако немате никакве преводе за конверзију, можете да заборавите на
све ово и да се фокусирате на десни део схеме.

У врху десног дела је приказана акција оригиналног аутора, освежавање
документације.  Средњи десни део приказује аутоматска ажурирања фајлова
превода: нови материјал се издваја и пореди са постојећим преводом. За
делове који се нису изменили користиће се претходни превод, док се делимично
измењени делови повезују са претходним преводом помоћу „fuzzy” ознаке која
означава да превод мора да се ажурира. Нови или доста измењени материјал се
оставља непреведен.

Затим, I<ручно уређивање> означава радњу преводилаца,који мењају PO фајлове
како би обезбедили преводе за сваки оригинални стринг и пасус. Ово може да
се обави било употребом специјализованог едитора као што је B<GNOME
Translation Editor>, KDE-ов B<Lokalize> или B<poedit>, било употребом
платформе за локализацију на мрежи као што је B<weblate> или
B<pootle>. Резултат превода је скуп PO фајлова, по један за сваки језик. За
више детаља, молимо вас погледајте gettext документацију.

Доњи део слике приказује како B<po4a> креира преведени изворни документ из
F<мастер.doc> оригиналног документа и F<doc.XX.po> каталога превода који су
преводиоци ажурирали. Поново се искоришћава структура документа, док се
оригинални садржај замењује својим одговарајућим преводом. Необавезно, може
да се употреби додатак како би се превод допунио неким додатним текстом. Ово
се често користи да се дода име преводиоца финалном документу. Погледајте
ниже за још детаља.

Када се покрене, B<po4a> аутоматски ажурира и фајлове превода и преведене
фајлове документације.

=head2 Започињање новог пројекта превода

Ако почињете од нуле, потребно је само да напишете конфигурациони фајл за
po4a и спремни сте.  За фајлове који недостају се аутоматски креирају
одговарајући шаблони, тако да сарадници могу почети да преводе ваш пројекат
на свој језик. Молимо вас да погледате L<po4a(1)>. Тамо се налази туторијал
за брзи почетак, као и сви детаљи.

Ако имате постојећи превод, нпр, фајл документације који је ручно преведен,
алатом B<po4a-gettextize> његов садржај можете да интегришете у po4a процес
рада. Овај задатак је донекле напоран (као што је описано у man страници
алата), али једном када се ваш пројекат конвертује у po4a процес рада, све
ће се ажурирати аутоматски.

=head2 Ажурирање превода и докумената

Једном када се подеси, покретање B<po4a> је довољно да се ажурирају и PO
фајлови за превођење и преведени документи. Програму B<po4a> можете да
проследите C<--no-translations> ако не желите да се ажурирају преводи
(односно да се ажурирају само PO фајлови) или C<--no-update> ако не желите
да се ажурирају PO фајлови (односно да се ажурирају само преводи). Ово
отприлике одговара појединачним B<po4a-updatepo> и B<po4a-translate>
скриптама које су сада застареле (погледајте „Зашто су појединачне скрипте
застареле” у ЧПП испод).

=head2 Употреба додатака за додавање додатног текста преводима

Додавање новог текста преводу је вероватно једина ствар која је
једноставнија на дуже стазе у случају када фајлове преводите ручно :). Ове
се дешава када желите да додате допунски одељак преведеном документу, који
не одговара никаквом садржају оригиналног документа. Класични случај
употребе је за одавање признања преводилачком тиму, као и да се наведе начин
за пријаву проблема који се тичу превода.

Са po4a, морате да наведете B<додатак> фајлове, на које концептуално може да
се гледа као на закрпе које се примењују над локализованим документом након
обраде. Сваки додатак мора да се достави као посебан фајл, чији формат је
међутим, веома различит у односу на класичне закрпе. Прва линија је I<линија
заглавља>, која дефинише тачку уметања додатка (нажалост са криптичном
синтаксом -- погледајте ниже) док се остатак фајла умеће дословно на
одређену позицију.

Линија заглавља мора да почне са стрингом B<PO4A-HEADER:>, након чега следи
листа I<кључ>B<=>I<вредност> поља раздвојених са тачка запета знацима.

На пример, следеће заглавље декларише додатак који мора да се постави на сам
крај превода.

 PO4A-HEADER: mode=eof

Ствари постају компликованије када додатни садржај желите да поставите у
средину документа. Наредно заглавље декларише додатак који у превод мора да
се постави након XML одељка који садржи стринг C<У вези овог документа>.

 PO4A-HEADER: position=About this document; mode=after; endboundary=</section>

У пракси, када покушава да примени додатак, програм po4a тражи прву линију
која задовољава C<position> аргумент (то може да буде регизраз). Не
заборавите да po4a овде разматра B<преведени> документ. Ова документација је
на српском језику, али ваша линија би вероватно требало да изгледа као што
следи, у случају да намеравате да свој додатак уметнете у француски превод.

 PO4A-HEADER: position=À propos de ce document; mode=after; endboundary=</section>

Онда када се у циљном документу пронађе C<position>, програм po4a тражи
следећу линију након C<position> која се подудара са наведеним
C<endboundary>. Додатак се умеће непосредно B<иза> те линије (јер смо задали
I<endboundary>, тј. границу на којој се завршава текући одељак).

Потпуно исти ефекат би могао да се добије следећим еквивалентним заглављем:

 PO4A-HEADER: position=About this document; mode=after; beginboundary=<section>

Овде програм po4a тражи у преводу прву линију која се подудара са C<<
<section> >> након линије која се подудара са C<У вези овог документа>, и
умеће додатак B<испред> те линије, јер смо задали I<beginboundary>,
тј. границу која означава почетак наредног одељка. Тако да ова линија
заглавља захтева да се додатак постави иза одељка који садржи C<У вези овог
документа>, и обавештава програм po4a да одељак започиње линијом која садржи
ознаку C<< <section> >>. Ово је еквивалентно са претходним примером јер, у
суштини, оно што заиста желите је да уметнете овај додатак иза C<<
</section> >> или испред C<< <section> >>.

Можете такође да поставите режим уметања I<mode> на вредност C<before>, са
сличном семантиком: комбиновање C<mode=before> са C<endboundary> ће да
постави додатак непосредно B<иза> пронађене границе, то јест последње
потенцијалне граничне линије испред C<position>. Комбиновање C<mode=before>
са C<beginboundary> ће да постави додатак непосредно B<испред> пронађене
границе, то јест последње потенцијалне граничне линије испред C<position>.

  Mode   | Boundary kind |     Used boundary      | Insertion point compared to the boundary
 ========|===============|========================|=========================================
 'before'| 'endboundary' | last before 'position' | Right after the selected boundary
 'before'|'beginboundary'| last before 'position' | Right before the selected boundary
 'after' | 'endboundary' | first after 'position' | Right after the selected boundary
 'after' |'beginboundary'| first after 'position' | Right before the selected boundary
 'eof'   |   (none)      |  n/a                   | End of file

=head3 Савети и трикови у вези додатака

=over

=item

Запамтите да су све ово регуларни изрази. На пример, ако желите да пронађете
крај nroff одељка који се завршава са линијом C<.fi>, немојте да користите
C<.fi> као B<endboundary>, јер ће то да пронађе C<the[ fi]le>, што очигледно
није оно што очекујете. У овом случају, исправна вредност за B<endboundary>
је: C<^\.fi$>.

=item

Празни карактери у садржају C<position> и граница СУ БИТНИ. Тако да се
наредне две линије B<разликују>. Друга ће да се пронађе само онда када у
преведеном документу има довољно празних карактера на крају.

 PO4A-HEADER: position=About this document; mode=after; beginboundary=<section>
 PO4A-HEADER: position=About this document ; mode=after; beginboundary=<section>

=item

Мада се може помислити да се ова претрага контекста оквирно врши над сваком
линијом B<преведеног> документа, она се у ствари врши над интерном стрингу
података преведеног документа. Овај интерни стринг података може да буде
текст који се протеже над пасусом који садржи више линија, или може да буде
само једна XML ознака. Тачно I<место уметања> додатка мора да буде пре или
након интерног стринга података и не може да се нађе унутар тог стринга
података.

=item

Да бисте разумели како се додаци умећу у превод, проследите аргумент B<-vv>
програму B<po4a>. Од помоћи је и да покренете програм B<po4a >у дибаг режиму
јер тако можете да видите стварне интерне стрингове података у случају када
се додатак не примењује.

=back

=head3 Примери додатака

=over

=item

Ако желите да додате нешто након следећег nroff одељка:

  .SH "AUTHORS"

Требало би да изаберете приступ у два корака постављањем
B<mode=after>. Затим би требало да сузите претрагу на линију након
B<AUTHORS> регуларним изразом за аргумент B<position>. Затим би требало да
пронађете почетак наредног одељка (нпр. B<^\.SH>) помоћу регуларног израза
за аргумент B<beginboundary>. Дакле:

 PO4A-HEADER:mode=after;position=AUTHORS;beginboundary=\.SH

=item

Ако желите да додате нешто непосредно иза одређене линије (нпр. након линије
„Права умножавања Велики Даса”), искористите B<position> које се подудара са
том линијом, B<mode=after> и за B<beginboundary> задајте да се подудара са
било којом линијом.

 PO4A-HEADER:mode=after;position=Copyright Big Dude, 2004;beginboundary=^

=item

Ако желите нешто да додате на крај документа, поставите да се B<position>
подудара са било којом линијом вашег документа (али само са једном
линијом. Програм Po4a неће наставити даље ако није једна линија), и
поставите да се B<endboundary> не подудара ни са чим. Овде немојте да
користите једноставне стрингове као B<"EOF">, већ радије задајте оне за које
је мала вероватноћа да постоје у вашем документу.

 PO4A-HEADER:mode=after;position=About this document;beginboundary=FakePo4aBoundary

=back

=head3 Детаљнији пример

Оригинални документ (POD форматиран):

 |=head1 NAME
 |
 |dummy - a dummy program
 |
 |=head1 AUTHOR
 |
 |me

Затим, следећи додатак ће обезбедити да се одељак (на француском) у вези
преводиоца дода на крај фајла (на француском "TRADUCTEUR" значи
"TRANSLATOR", а "moi" значи "me").

 |PO4A-HEADER:mode=after;position=AUTEUR;beginboundary=^=head
 |
 |=head1 TRADUCTEUR
 |
 |moi
 |

Да бисте уметнули свој додатак испред AUTHOR, употребите следеће заглавље:

 PO4A-HEADER:mode=after;position=NOM;beginboundary=^=head1

Ово функционише јер је наредна линија која се подудара са B<beginboundary>
C</^=head1/> иза одељка "NAME" (преведено на "NOM" у француском), она која
наводи ауторе. Дакле, додатак ће да се постави између ова два
одељка. Приметите да ако се касније дода још један одељак између NAME и
AUTHOR одељака, програм po4a ће погрешно да постави додатак испред тог новог
одељка.

Да бисте ово спречили, исти резултат можете да постигнете употребом
B<mode>=I<before>:

 PO4A-HEADER:mode=before;position=^=head1 AUTEUR

=head1 На који начин програм функционише?

Ово поглавље ће да вам представи кратак преглед унутрашњих процеса у
програму po4a, тако да нам можете са више самопоуздања помоћи да га
одржавамо и унапређујемо. Такође може да вам помогне да разумете зашто не
ради нешто што очекујете, као и да вам представи начине за решавање ваших
проблема у раду са програмом.

=head2 TransTractor-и и архитектура пројекта

У језгру po4a пројекта, класа
L<Locale::Po4a::TransTractor(3pm)|TransTractor> је заједнички предак за све
po4a парсере. Ово чудно име је последица чињенице да је она у исто време
задужена и за превођење документа и за издвајање стрингова.

Формалније речено, она узима документ који треба да се преведе као и PO фајл
који садржи преводе који треба да се користе као улаз, а генерише два
одвојена излаза: други PO фајл (произашао као резултат издвајања преводивих
стрингова из улазног документа), и преведени документ (са истом структуром
као и улазни документ, али са свим преводивим стринговима замењеним
садржајем улазног PO). Ево графичке представе овога:

   Input document --\                             /---> Output document
                     \      TransTractor::       /       (translated)
                      +-->--   parse()  --------+
                     /                           \
   Input PO --------/                             \---> Output PO
                                                       (extracted)

Ова мала кост је срж целе po4a архитектуре. Ако наведете оба улаза и
одбаците излазни PO, добијате B<po4a-translate>. Ако уместо тода одбаците
излазни документ, добијате B<po4a-updatepo>. Програм B<po4a> користи први
TransTractor да добије ажурирани POT фајл (одбацујући излазне документе),
затим позива B<msgmerge -U> да ажурира PO фајлове превода на диску и
изграђује други TransTractor са овим ажурираним PO фајловима да би ажурирао
излазне документе. Укратко, B<po4a> обезбеђује решење које у једном кораку
ажурира све што је потребно, уз употребу само једног конфигурационог фајла.

B<po4a-gettextize> такође користи два TransTractor-а, али на другачији
начин: он изграђује по један TransTractor за сваки језик, па онда изграђује
нови PO фајл чији су msgid стрингови msgid стрингови оригиналног документа,
а msgstr стрингови msgid стрингови преведеног документа. Да би се обезбеило
да се стрингови подударени на овакав начин и заиста подударају, потребно је
много труда, као што је описано у L<po4a-gettextize(1)>.

=head2 Парсери за одређене формате

Сви po4a парсери формата се имплементирају преко TransTractor. Неки од њих
су врло једноставни, као што су Text, Markdown и AsciiDoc. Они читају једну
по једну линију користећи C<TransTractor::shiftline()>, акумулирају садржаје
пасуса или шта већ. Онда када се стринг у потпуности парсира, парсер користи
C<TransTractor::translate()> да (1) уметне овај стринг у излазни PO фајл и
(2) преузме превод из улазног PO фајла. Парсер затим гура резултат у излазни
фајл користећи C<TransTractor::pushline()>.

Неки други парсеру су сложенији јер се за анализу улазног документа ослањају
на спољни парсер. Xml, HTML, SGML и Pod парсери су изграђени преко SAX
парсера. Они декларишу функције повратног позива на догађаје као што је
„Пронашао сам нови наслов чији је садржај следеће” којима ажурирају излазни
документ и излазне POT фајлове у сагласности са садржајем на улазу користећи
C<TransTractor::translate()> и C<TransTractor::pushline()>. Yaml парсер је
сличан, али ипак различит: он серијализује структуру података коју прави
YAML::Tiny парсер. То је разлог што Yaml модул програма po4a не успева да
декларише линије референци: парсер не чува локацију сваког стринга у улазном
фајлу, тако да једино можемо навести „$filename:1” као стринг
локације. Парсери засновани на SAX користе глобале и остале трикове за
чување референци на имена фајлова и бројеве линија.

Један посебан проблем настаје услед кодирања фајла и BOM маркера. Прости
парсеру могу да забораве на проблем, то се обрађује у
C<TransTractor::read()> (користи се интерно за читање линија улазног
документа), али модули који се ослањају на спољни парсер морају обезбедити
да се сви фајлови читају одговарајућим PerlIO слојем за
декодирање. Најједноставнији начин је да сами отворите фајл, па да свом
спољном парсеру проследите ручку фајла, или директно комплетни
стринг. Погледајте C<Pod::read()> и C<Pod::parse()> на пример. Садржај који
чита TransTractor се игнорише, али се спољном парсеру прослеђује свежа ручка
фајла. Важан део је C<< "<:encoding($charset)" >> режим који се прослеђује
B<open()> perl функцији.

=head2 Po објекти

Класа L<Locale::Po4a::Po(3pm)|Po> је задужена за учитавање и употребу PO и
POT фајлова. Тачније, можете да читате фајл, додајете ставке, преузимате
преводи B<gettext()> методом, уписујете PO у фајл. Напредније функције као
што је спајање PO фајла у односу на POT фајл или потврђивање фајла се
делегирају програмима B<msgmerge> и B<msgfmt> редом.

=head2 Давање доприноса пројекту po4a

Чак и ако никада раније нисте дали допринос ниједном пројекту Отвореног
кода, добродошли: вољни смо да вам помогнемо и да овде будемо ваш
ментор. Данас po4a најбоље одржавају његови корисници. Пошто нам недостаје
радне снаге, покушавамо да пројекат учинимо приступачнијим тако што
унапређујемо документацију и аутоматске тестове тако да осетите поузданост
приликом давања доприноса пројекту. За више детаља, молимо вас да погледате
CONTRIBUTING.md фајл.

=head1 Пројекти отвореног кода који користе po4a

Следи веома делимична листа пројеката који за своју документацију у
продукцији користе po4a. Ако свој пројекат желите да додате на ову листу,
само нам пошаљите мејл (или Merge захтев).

=over

=item

adduser (man): алат за управљање корисницима и групама.

=item

apt (man, docbook): Debian менаџер пакета.

=item

aptitude (docbook, svg): терминалски менаџер пакета за Debian

=item

L<F-Droid вебсајт|https://gitlab.com/fdroid/fdroid-website> (markdown):
каталог FOSS (Free and Open Source Software) апликација за Андроид платформу
које могу да се инсталирају.

=item

L<git|https://github.com/jnavila/git-manpages-l10n> (asciidoc):
дистрибуирани систем за контролу верзија који служи за праћење измена у
изворном коду.

=item

L<Linux manстране|https://salsa.debian.org/manpages-l10n-team/manpages-l10n>
(man)

Овај пројекат обезбеђује инфраструктуру за превођење многих manстраница на
различите језике, спремне за интеграцију у неколико главних дистрибуција
(Arch Linux, Debian и из њега изведене, Fedora).

=item

L<Stellarium|https://github.com/Stellarium/stellarium> (HTML): бесплатан
планетаријум отвореног кода за ваш компјутер. po4a се користи за превод
описа небеске културе.

=item

L<Jamulus|https://jamulus.io/> (markdown, yaml, HTML): FOSS апликација за
онлајн jamming у реалном времену. Документација веб сајта се одржава на више
језика помоћу po4a.

=item

Још једна ставка која треба да се среди:
L<https://gitlab.com/fdroid/fdroid-website/>
L<https://github.com/fsfe/reuse-docs/pull/61>

=back

=head1 ЧПП

=head2 Како се изговара po4a?

Ја га лично изговарам као L<pouah|https://en.wiktionary.org/wiki/pouah>, што
је француска ономатопејска реч коју користимо уместо бљак :) Вероватно имам
чудан смисао за хумор :)

=head2 Зашто су појединачне скрипте застареле?

Indeed, B<po4a-updatepo> and B<po4a-translate> are deprecated in favor of
B<po4a>. The reason is that while B<po4a> can be used as a drop-in
replacement to these scripts, there is quite a lot of code duplication
here. Individual scripts last around 150 lines of codes while the B<po4a>
program lasts 1200 lines, so they do a lot in addition of the common
internals. The code duplication results in bugs occurring in both versions
and needing two fixes. One example of such duplication are the bugs #1022216
in Debian and the issue #442 in GitHub that had the exact same fix, but one
in B<po4a> and the other B<po4a-updatepo>.

На дуже стазе, желео бих да укинем појединачне скрипте и да одржавам само
једну верзију овог кода. Оно што је сигурно је то да се појединачне скрипте
више неће унепређивати, тако да ће само B<po4a> добијати нове
функционалности. С друге стране, нема хитности око застаревања. Планирам да
појединачне скрипте чувам што је могуће дуже, барем до 2030. године. Ако ваш
пројекат у 2030. још увек користи B<po4a-updatepo> и B<po4a-translate> можда
ћете наићи на проблем.

Можда у неком тренутки и укинемо застаревање ових скрипти, ако рефакторисање
сведе диплирање кода на нулу. Ако имате идеју (или још боље: закрпу), ваша
помоћ је добродошла.

=head2 Шта је са осталим алатима за превођење документације помоћу gettext?

Има их неколико. Ево вероватно непотпуне листе, са још алата који су близу
хоризонта.

=over

=item B<poxml>

Ово је алат који су развили KDE људи за обраду DocBook XML. Колико ја знам,
то је први програм који издваја из документације стрингове за превод у PO
фајлове, па их након превођења умеће назад.

Он може да ради само са XML форматом, и само са одређеним DTD. Посебно нисам
задовољан начином на који обрађује листе, које на крају постају један велики
msgid. Када листа постане велика, залогај постаје тежак за гутање.

=item B<po-debiandoc>

Овај програм који је урадио Дени Барбије представља неку врсту претече po4a
SGML модула, који га мање-више чини застарелим. Као што име говори, он
обрађује само DebianDoc DTD, што је такође мање-више застарео DTD.

=item B<xml2po.py>

Употребљава GIMP Тим за документацију од 2004. године, функционише прилично
добро упркос томе што, као што име наговештава, ради само са XML фајловима и
захтева специјално конфигурисане makefile фајлове.

=item B<Sphinx>

За управљање својим преводима, Sphinx Documentation Project такође доста
користи gettext. Нажалост, функционише само за неколико текст формата, rest
и markdown, мада је вероватно једини алат који то ради управљајући
комплетним процесом превођења.

=back

Главне предности програма po4a над њима је једноставност уметања додатног
садржаја (која је тамо још гора) и могућност постизања gettextизације.

=head2 РЕЗИМЕ предности приступа базираног на gettext

=over 2

=item

Преводи се не чувају заједно са оригиналом, чиме је омогућено да се открије
застарелост превода.

=item

Преводи се чувају засебно у одвојеним фајловима, чиме се спречава међусобно
ометање преводиоца различитих језика, како током предаје својих закрпа тако
и на нивоу кодирања фајла.

=item

Интерно је заснован на B<gettext> (мада B<po4a> нуди веома једноставан
интерфејс, тако да не морате разумети унутрашње функционисање да бисте га
користили). На тај начин не морамо поново да откријемо рупу на саксији, а из
разлога што су ти алати широко распрострањени, можемо претпоставити и да су
мање-више ослобођени багова.

=item

За крајње кориснике ништа није промењено (осим чињенице да ће највероватније
боље да одржавају преводе). Резултујући фајл документације који се
дистрибуира је потпуно исти.

=item

Нема потребе да преводиоци уче нову синтаксу фајлова и њихов омиљени едитор
PO фајлова (као што су Емаксов PO режим, Lokalize или Gtranslator) ће сасвим
лепо да функционише.

=item

gettext обезбеђује једноставан начин за добијање статистика у вези онога што
је урађено, онога што треба да се редигује и ажурира, као и онога што је још
преостало да се уради. Неки пример може да се пронађе на следећим адресама:

 - https://docs.kde.org/stable5/en/kdesdk/lokalize/project-view.html
 - http://www.debian.org/intl/l10n/

=back

Али није све тако сјајно, овај приступ има и неке лоше стране са којима
морамо да се носимо.

=over 2

=item

Додаци су на први поглед донекле чудни.

=item

Преведени текст не можете да прилагодите по свом нахођењу, као на пример, да
овде поделите пасус, а онде спојите друга два. Мада у неку руку, ако постоји
проблем са оригиналом, то би у сваком случају требало да се пријави као баг.

=item

Чак и са једноставним интерфејсом, он је ипак нови алат који људи морају
научити како да користе.

Један од мојих снова би био да некако интегришемо po4a у Gtranslator или
Lokalize. Када се фајл документације отвори, стрингови се аутоматски
издвоје, и преведени фајл + po фајл могу да се упишу на диск. Ако успемо да
урадимо MS Word (TM) модул (или макар RTF) можда би га чак користили и
професионални преводиоци.

=back

=head1 ПОГЛЕДАЈТЕ ТАКОЂЕ

=over

=item

Документација све-у-једном алата који би требало да користите: L<po4a(1)>.

=item

Документација појединачних po4a скрипти: L<po4a-gettextize(1)>,
L<po4a-updatepo(1)>, L<po4a-translate(1)>, L<po4a-normalize(1)>.

=item

Додатне помоћне скрипте: L<msguntypot(1)>, L<po4a-display-man(1)>,
L<po4a-display-pod(1)>.

=item

The parsers of each formats, in particular to see the options accepted by
each of them: L<Locale::Po4a::AsciiDoc(3pm)> L<Locale::Po4a::Dia(3pm)>,
L<Locale::Po4a::Gemtext(3pm)>, L<Locale::Po4a::Guide(3pm)>,
L<Locale::Po4a::Ini(3pm)>, L<Locale::Po4a::KernelHelp(3pm)>,
L<Locale::Po4a::Man(3pm)>, L<Locale::Po4a::RubyDoc(3pm)>,
L<Locale::Po4a::Texinfo(3pm)>, L<Locale::Po4a::Text(3pm)>,
L<Locale::Po4a::Xhtml(3pm)>, L<Locale::Po4a::Yaml(3pm)>,
L<Locale::Po4a::BibTeX(3pm)>, L<Locale::Po4a::Docbook(3pm)>,
L<Locale::Po4a::Halibut(3pm)>, L<Locale::Po4a::LaTeX(3pm)>,
L<Locale::Po4a::Org(3pm)>, L<Locale::Po4a::Pod(3pm)>,
L<Locale::Po4a::SimplePod(3pm)>, L<Locale::Po4a::Sgml(3pm)>,
L<Locale::Po4a::TeX(3pm)>, L<Locale::Po4a::VimHelp>,
L<Locale::Po4a::Wml(3pm)>, L<Locale::Po4a::Xml(3pm)>.

=item

Имплементација основне инфраструктуре: L<Locale::Po4a::TransTractor(3pm)>
(од посебне важности за разумевање организације кода),
L<Locale::Po4a::Chooser(3pm)>, L<Locale::Po4a::Po(3pm)>,
L<Locale::Po4a::Common(3pm)>. Молимо вас да у стаблу изворног кода такође
погледате и фајл F<CONTRIBUTING.md>.

=back

=head1 АУТОРИ

 Denis Barbier <barbier,linuxfr.org>
 Martin Quinson (mquinson#debian.org)
