Rechercher une page de manuel
po4a
Langue: pl
Version: 2008-11-05 (ubuntu - 08/07/09)
Section: 7 (Divers)
Sommaire
- NAZWA
- WstA.Xp
- Spis treA°Xci
- Dlaczego uA°XywaA.X po4a? Do czego jest on przydatny?
- Jak uA°XywaA.X po4a?
- Graficzne podsumowanie
- JAK zaczA.XA.X nowe tA°Xumaczenie?
- JAK zamieniA.X tA°Xumaczenie z powrotem do pliku dokumentacji?
- JAK zaktualizowaA.X tA°Xumaczenie programem po4a?
- JAK skonwertowaA.X istniejA.Xce tA°Xumaczenia do po4a?
- JAK dodaA.X dodatkowy tekst do tA°XumaczeA°X (np. nazwisko tA°Xumacza)?
- JAK to wszystko zrobiA.X, wywoA°XujA.Xc tylko jeden program?
- Jak to dziaA°Xa?
- FAQ
- Dlaczego trzeba tA°XumaczyA.X kaA°Xdy akapit osobno?
- Dlaczego nie podzieliA.X na zdania (lub mniejsze czA.XA°Xci)?
- Dlaczego nie umieA°XciA.X oryginaA°Xu jako komentarza do tA°Xumaczenia (lub w inny sposA~Xb)?
- Ale gettext nie zostaA°X zaprojektowany do takiego uA°Xycia!
- Co z innymi narzA.Xdziami do tA°XumaczeA°X dokumentacji wykorzystujA.Xcymi gettext?
- Przekazywanie deweloperom wiedzy o tA°Xumaczeniu
- PODSUMOWANIE plusA~Xw i minusA~Xw rozwiA.Xzania opartego na gettext
- Znane bA°XA.Xdy i i A°XA.Xdania nowych funkcjonalnoA°Xci
- AUTORZY
- TA°XUMACZENIE
NAZWA
po4a - narzA.Xdzia do tA°XumaczeA°X dokumentacji i innych materiaA°XA~XwWstA.Xp
Celem projektu po4a (``po for anything'') jest uA°Xatwienie tA°XumaczeA°X (oraz, co ciekawsze, zarzA.Xdzania tA°Xumaczeniami) przy uA°Xyciu narzA.Xdzi gettext w tych obszarach, gdzie nie byA°Xy uA°Xywane, jak na przykA°Xad w obszarze dokumentacji.Spis treA°Xci
Dokument jest zorganizowany nastA.XpujA.Xco:- 1. Dlaczego powinno siA.X uA°XywaA.X po4a? Jakie sA.X jego zalety?
- Ten rozdziaA°X wprowadzenia wyjaA°Xnia motywy i filozofiA.X projektu. JeA°Xeli rozwaA°Xasz uA°Xycie po4a do Twoich tA°XumaczeA°X, powinieneA°X najpierw przeczytaA.X ten rozdziaA°X.
- 2. Jak uA°XywaA.X po4a?
- RozdziaA°X ten jest rodzajem podrA.Xcznika i prA~Xbuje odpowiedzieA.X na pytania uA°XytkownikA~Xw, pozwalajA.Xc lepiej zrozumieA.X caA°Xy proces. Odpowiada, jak wykonaA.X rA~XA°Xne rzeczy w po4a, i sA°XuA°Xy jako wprowadzenie do dokumentacji konkretnych narzA.Xdzi.
-
- JAK zaczA.XA.X nowe tA°Xumaczenie?
- JAK zamieniA.X tA°Xumaczenie z powrotem do pliku dokumentacji?
- JAK zaktualizowaA.X tA°Xumaczenie programem po4a?
- JAK skonwertowaA.X istniejA.Xce tA°Xumaczenia do po4a?
- JAK dodaA.X dodatkowy tekst do tA°XumaczeA°X (np. nazwisko tA°Xumacza)?
- JAK to wszystko zrobiA.X, wywoA°XujA.Xc tylko jeden program?
-
- 3. Jak to dziaA°Xa?
- Ten rozdziaA°X zawiera krA~Xtki opis wewnA.Xtrznych mechanizmA~Xw po4a, tak A°Xe bA.Xdziesz miaA°X wiA.Xcej odwagi, aby pomA~Xc nam w jego tworzeniu i udoskonalaniu. MoA°Xe takA°Xe Ci pomA~Xc w zrozumieniu, dlaczego nie dziaA°Xa tak, jak byA°X tego oczekiwaA°X, oraz jak rozwiA.XzaA.X napotkane problemy.
- 4. FAQ
- Ten rozdziaA°X zawiera odpowiedzi na czA.Xsto zadawane pytania. Tak naprawdA.X, wiA.XkszoA°XA.X tych pytaA°X moA°Xe byA.X sformuA°Xowanych jako ``Dlaczego po4a zostaA°Xo zaprojektowane tak, a nie inaczej?''. JeA°Xli wydaje Ci siA.X, A°Xe po4a nie jest wA°XaA°Xciwym narzA.Xdziem do tA°Xumaczenia dokumentacji, powinieneA°X rozwaA°XyA.X przeczytanie tego rozdziaA°Xu. JeA°Xli nie znajdziesz w nim odpowiedzi na swoje pytanie, prosimy siA.X z nami skontaktowaA.X poprzez listA.X dyskusyjnA.X <po4a-devel@lists.alioth.debian.org>. Uwielbiamy znaA.X opinie uA°XytkownikA~Xw.
- 5. Specyficzne uwagi o moduA°Xach
- Ten rozdziaA°X opisuje rzeczy specyficzne dla kaA°Xdego moduA°Xu, z punktu widzenia zarA~Xwno tA°Xumacza, jak i autora oryginalnego dokumentu. CzytajA.Xc ten rozdziaA°X, dowiesz siA.X, kiedy dany moduA°X wykonuje tA°Xumaczenia oraz jakich zasad powinieneA°X przestrzegaA.X, piszA.Xc oryginalny dokument, aby uproA°XciA.X A°Xycie tA°Xumaczom.
W zasadzie, ta sekcja nie jest czA.XA°XciA.X tego dokumentu. Zamiast tego jest umieszczana w dokumentacji kaA°Xdego moduA°Xu. Pomaga to w zapewnieniu aktualnoA°Xci tych informacji, trzymajA.Xc kod i dokumentacjA.X razem.
- 6. Znane bA°XA.Xdy i A°XA.Xdania nowych funkcjonalnoA°Xci
- JuA°X kilka :(
Dlaczego uA°XywaA.X po4a? Do czego jest on przydatny?
Podoba mi siA.X idea wolnego oprogramowania, pozwalajA.Xcego kaA°Xdemu na dostA.Xp do programA~Xw i ich kodA~Xw A°XrA~XdA°Xowych. BA.XdA.Xc jednak Francuzem, jestem A°Xwiadomy tego, A°Xe licencja programu nie jest jedynym ograniczeniem otwartoA°Xci oprogramowania: nieprzetA°Xumaczone oprogramowanie jest bezuA°Xyteczne dla ludzi nieznajA.Xcych angielskiego, wiA.Xc ciA.Xgle czeka na nas duA°Xo pracy, A°Xeby udostA.XpniA.X je kaA°Xdej takiej osobie.A°XwiadomoA°XA.X tego problemu wA°XrA~Xd osA~Xb zwiA.Xzanych z oprogramowaniem open-source ostatnio znacznie wzrosA°Xa. WygraliA°Xmy, jako tA°Xumacze, pierwszA.X bitwA.X i przekonaliA°Xmy wszystkich o znaczeniu tA°XumaczeA°X. Niestety, to byA°Xa ta A°Xatwiejsza czA.XA°XA.X. Teraz musimy wykonaA.X naszA.X pracA.X i przetA°XumaczyA.X wszystkie te rzeczy.
WA°XaA°Xciwie oprogramowanie typu open-source ma doA°XA.X przyzwoity poziom tA°XumaczeA°X, dziA.Xki wspaniaA°Xemu pakietowi gettext, ktA~Xry ma moA°XliwoA°Xci wyodrA.Xbniania z programu komunikatA~Xw do przetA°Xumaczenia, przekazywania tA°Xumaczom plikA~Xw w jednolitym formacie i uA°Xywania wynikA~Xw ich pracy do pokazywania uA°Xytkownikowi przetA°Xumaczonych komunikatA~Xw w czasie dziaA°Xania programu.
W przypadku dokumentacji sytuacja jest trochA.X inna. Zbyt czA.Xsto siA.X zdarza, A°Xe tA°Xumaczony dokument nie jest dostatecznie widoczny (nie jest dystrybuowany jako czA.XA°XA.X programu), jest tylko czA.XA°Xciowy lub nie jest aktualny. Ostatnia sytuacja jest najgorszA.X z moA°Xliwych. PrzestarzaA°Xe tA°Xumaczenie, opisujA.Xce stare, juA°X nieistniejA.Xce zachowanie programu, moA°Xe byA.X o wiele gorsze dla uA°Xytkownika niA°X brak tA°Xumaczenia w ogA~Xle.
Problem do rozwiA.Xzania
TA°Xumaczenie dokumentacji samo w sobie nie jest zbyt trudne. Teksty sA.X duA°Xo dA°XuA°Xsze niA°X komunikaty wyA°Xwietlane przez program, wiA.Xc ich tA°Xumaczenie zajmuje trochA.X wiA.Xcej czasu, nie wymaga przy tym jednak A°Xadnych umiejA.XtnoA°Xci technicznych. TrudniejszA.X czA.XA°XciA.X pracy jest zarzA.Xdzanie tA°Xumaczeniem. Wykrywanie czA.XA°Xci, ktA~Xre siA.X zmieniA°Xy i powinny byA.X zaktualizowane, jest bardzo trudne, podatne na bA°XA.Xdy i wysoce nieprzyjemne. Najprawdopodobniej wyjaA°Xnia to, dlaczego tak wiele przetA°Xumaczonej dokumentacji nie jest aktualne.Odpowiedzi po4a
Tak wiA.Xc, celem po4a jest uczynienie tA°XumaczeA°X dokumentacji A°Xatwymi do zarzA.Xdzania. IdeA.X jest wykorzystanie metodologii gettexta na tym nowym polu. Tak jak w programie gettext, teksty sA.X wyodrA.Xbniane z ich oryginalnych miejsc, aby mogA°Xy w jednolitym formacie zostaA.X zaprezentowane tA°Xumaczowi. Klasyczne narzA.Xdzia gettexta pomogA.X im uaktualniA.X ich pracA.X, kiedy pojawi siA.X nowa wersja oryginalnego dokumentu. W przeciwieA°Xstwie zaA°X do klasycznego modelu gettext, tA°Xumaczenia sA.X wstawiane do struktury oryginalnego dokumentu, tak A°Xeby mogA°Xy byA.X przetwarzane i dystrybuowane w dokA°Xadnie taki sam sposA~Xb, co wersja angielska.DziA.Xki temu staA°Xo siA.X A°Xatwiejsze znalezienie do przetA°Xumaczenia zmienionych czA.XA°Xci dokumentu. Innym plusem jest to, A°Xe w wypadku zasadniczej reorganizacji struktury dokumentu, gdy rozdziaA°Xy sA.X przesuwane, A°XA.Xczone lub dzielone, narzA.Xdzia wykonajA.X prawie caA°XA.X brudnA.X robotA.X. WyodrA.Xbnianie ze struktury dokumentu tekstA~Xw do przetA°Xumaczenia pozwala tA°Xumaczom nie przejmowaA.X siA.X zA°XoA°XonoA°XciA.X struktury dokumentu i zmniejsza szanse otrzymania dokumentu o niepoprawnej strukturze (choA.X zawsze jest to moA°Xliwe).
W sekcji FAQ poniA°Xej opisano kompletnA.X listA.X plusA~Xw i minusA~Xw tego rozwiA.Xzania.
ObsA°Xugiwane formaty
Obecnie rozwiA.Xzanie to zaimplementowano z sukcesem dla kilku formatA~Xw tekstu:nroff
Format starych, dobrych stron podrA.Xcznika ekranowego, uA°Xywanego przez wiele programA~Xw. ObsA°Xuga tego formatu w po4a jest mile widziana, poniewaA°X ten format jest raczej trudny w uA°Xyciu i niezbyt przyjazny dla nowych uA°XytkownikA~Xw. ModuA°X Locale::Po4a::Man(3pm) obsA°Xuguje rA~XwnieA°X format mdoc,uA°Xywany przez strony podrA.Xcznika systemu BSD (caA°Xkiem czA.Xsto wystA.XpujA.Xcych rA~XwnieA°X pod Linuksem).
pod
Jest to format dokumentacji Perla. W ten sposA~Xb jest udokumentowany sam jA.Xzyk i jego rozszerzenia, a takA°Xe wiA.XkszoA°XA.X istniejA.Xcych skryptA~Xw Perla. A°XA.Xczenie dokumentacji i kodu w jednym pliku, pomaga utrzymywaA.X aktualnoA°XA.X dokumentacji. Upraszcza to A°Xycie programisty, ale niestety, nie tA°Xumacza.
sgml
Nawet jeA°Xli jest obecnie wypierany przez XML, ten format jest wciA.XA°X raczej czA.Xsto uA°Xywany w dokumentach o dA°XugoA°Xci wiA.Xkszej niA°X kilka ekranA~Xw. Pozwala tworzyA.X kompletne ksiA.XA°Xki. Aktualizowane tA°XumaczeA°X tak dA°Xugich dokumentA~Xw moA°Xe byA.X prawdziwym koszmarem. Program diff bardzo czA.Xsto okazuje siA.X bezuA°Xyteczny, jeA°Xli zmieni siA.X struktura oryginalnego tekstu. Na szczA.XA°Xcie, z pomocA.X moA°Xe przyjA°XA.X po4a.
Obecnie obsA°Xugiwane sA.X tylko DTD debiandoc i docbook, ale dodanie obsA°Xugi nowego typu jest bardzo proste. Jest nawet moA°Xliwe uA°Xycie po4a z nieznanym DTD SGML bez zmiany kodu - przez podanie wymaganych informacji w parametrach linii poleceA°X. SzczegA~XA°Xy moA°Xna znaleA°XA.X w Locale::Po4a::Sgml(3pm).
TeX / LaTeX
Format LaTeX jest gA°XA~Xwnym formatem dokumentacji uA°Xywanym w publikacjach pisanych przez ludzi zwiA.Xzanych ze A°Xwiatem wolnego oprogramowania. ModuA°X Locale::Po4a::LaTeX(3pm) byA°X testowany na dokumentacji Pythona, ksiA.XA°Xce i kilku prezentacjach.
texinfo
CaA°Xa dokumentacja GNU jest pisana w tym formacie (i jest to nawet jedno z wymagaA°X stawianych projektom , ktA~Xre chcA.X staA.X siA.X oficjalnymi projektami GNU). Wsparcie dla Locale::Po4a::Texinfo(3pm) jest wciA.XA°X w fazie poczA.Xtkowej. Prosimy o zgA°Xaszanie bA°XA.XdA~Xw i przesyA°Xanie uwag dotyczA.Xcych brakujA.Xcych funkcjonalnoA°Xci.
xml
XML jest formatem bazowym wielu innych formatA~Xw dokumentacji.
Obecnie po4a obsA°Xuguje docbook DTD. SzczegA~XA°Xy moA°Xna znaleA°XA.X w Locale::Po4a::Docbook(3pm).
inne
Po4a moA°Xe takA°Xe obsA°XugiwaA.X kilka rzadszych lub bardziej specjalizowanych formatA~Xw, takich jak dokumentacja opcji kompilacji jA.Xder 2.4 lub diagramA~Xw wyprodukowanych przez narzA.Xdzie dia. Dodanie nowego formatu jest czA.Xsto bardzo proste, a gA°XA~Xwnym zadaniem jest napisanie parsera tego formatu. WiA.Xcej informacji o tym moA°Xna znaleA°XA.X w Locale::Po4a::TransTractor(3pm).
Formaty niewspierane
Niestety, po4a ciA.Xgle nie obsA°Xuguje kilku formatA~Xw dokumentacji.Istnieje caA°Xa masa innych formatA~Xw, ktA~Xre byA°Xmy chcieli obsA°XugiwaA.X w po4a, i nie sA.X to tylko formaty dokumentacji. W zasadzie, naszym celem jest wypeA°Xnienie wszystkich dziur pozostawionych przez klasyczne narzA.Xdzia gettext. Obejmuje to opisy pakietA~Xw (deb i rpm), pytania skryptA~Xw instalacyjnych pakietA~Xw, logi zmian pakietA~Xw i wszystkie specjalizowane formaty uA°Xywane przez programy, jak na przykA°Xad scenariusze gier lub pliki zasobA~Xw wine.
Jak uA°XywaA.X po4a?
RozdziaA°X ten jest rodzajem podrA.Xcznika i prA~Xbuje odpowiedzieA.X na pytania uA°XytkownikA~Xw, pozwalajA.Xc lepiej zrozumieA.X caA°Xy proces. Odpowiada, jak wykonaA.X rA~XA°Xne rzeczy w po4a, i sA°XuA°Xy jako wprowadzenie do dokumentacji konkretnych narzA.Xdzi.Graficzne podsumowanie
NastA.XpujA.Xcy schemat pokazuje poglA.Xdowo proces tA°Xumaczenia dokumentacji z uA°Xyciem po4a. Nie powinno siA.X przejmowaA.X jego pozornA.X zA°XoA°XonoA°XciA.X, ktA~Xra wziA.XA°Xa siA.X stA.Xd, A°Xe pokazaliA°Xmy tutaj caA°Xy proces. Po skonwertowaniu projektu do po4a, istotna bA.Xdzie tylko prawa czA.XA°XA.X schematu. ProszA.X zauwaA°XyA.X, A°Xe sgml wystA.Xpuje tu jako przykA°Xad i caA°Xy schemat jest dokA°Xadnie taki sam dla wszystkich moduA°XA~Xw. KaA°XdA.X czA.XA°XA.X rysunku omA~Xwimy szczegA~XA°Xowo w nastA.Xpnych sekcjach.fr.sgml oryginalny.sgml ---->------+------>----------->-------+ | | | | V V { aktualizacja oryginaA°Xu } | | | | | +--<---<--+ V | | | oryginalny.nowy.sgml ---->---->----+ V V | | [po4a-gettextize] +--->---->---+ | | | | V | | | | [po4a-updatepo] | | V ^ | V V oryginalny.pot | V | | | | fr.po | | | | (niepewny - fuzzy) | | { tA°Xumaczenie } | | | | | ^ V V | | | {rA.Xczna edycja} | V V | | | | | | V V | | +--<--- fr.po zaA°XA.Xcznik oryginalny.sgml +---->----+---->------->---> (aktualny) (opcjonalny) (aktualny) | | | v v v +------>-----+------<------+ | v [po4a-translate] | V fr.sgml (aktualny)
Lewa czA.XA°XA.X pokazuje konwersjA.X tA°Xumaczenia nie uA°XywajA.Xcego jeszcze po4a do tego systemu. GA~Xra prawej czA.XA°Xci pokazuje akcje autora oryginaA°Xu (aktualizowanie dokumentacji). A°Xrodek prawej czA.XA°Xci obrazuje automatyczne akcje po4a. Nowy materiaA°X jest wyodrA.Xbniany i porA~Xwnywany z istniejA.Xcymi tA°Xumaczeniami. Znajdowane sA.X czA.XA°Xci, ktA~Xre siA.X nie zmieniA°Xy, i dla nich uA°Xywane jest poprzednie tA°Xumaczenie. CzA.XA°Xci zmodyfikowane tylko w nieznacznym stopniu sA.X takA°Xe A°XA.Xczone z poprzednimi tA°Xumaczeniami, ale dodawany jest specjalny znacznik, mA~XwiA.Xcy, A°Xe tA°Xumaczenie musi byA.X uaktualnione. DA~XA°X rysunku pokazuje sposA~Xb, w jaki jest budowany sformatowany dokument.
WA°XaA°Xciwie, jedynA.X rA.XcznA.X operacjA.X, ktA~XrA.X musi wykonaA.X tA°Xumacz jest czA.XA°XA.X oznaczona {rA.Xczna edycja}. Przykro nam, po4a tylko pomaga tA°XumaczyA.X, ale niestety niczego za Ciebie nie przetA°Xumaczy...
JAK zaczA.XA.X nowe tA°Xumaczenie?
Ta sekcja opisuje kroki niezbA.Xdne do rozpoczA.Xcia nowego tA°Xumaczenia z uA°Xyciem po4a. Konwertowanie istniejA.Xcego projektu do tego systemu opisano w szczegA~XA°Xach w odpowiedniej sekcji.Aby zaczA.XA.X nowe tA°Xumaczenie, uA°XywajA.Xc po4a, naleA°Xy wykonaA.X nastA.XpujA.Xce kroki:
- -
- WyciA.XgnA.XA.X tekst do przetA°Xumaczenia z oryginalnego dokumentu do nowego pliku pot (format programu gettext). Aby to zrobiA.X, naleA°Xy wywoA°XaA.X program po4a-gettextize w nastA.XpujA.Xcy sposA~Xb:
$ po4a-gettextize -f <format> -m <master.doc> -p <tA°Xumaczenie.pot>
<format> jest oczywiA°Xcie formatem uA°Xywanym w dokumencie <master.doc>. Jak moA°Xna oczekiwaA.X, plikiem wyjA°Xciowym jest <tA°Xumaczenie.pot>. WiA.Xcej szczegA~XA°XA~Xw o dostA.Xpnych opcjach moA°Xna znaleA°XA.X w po4a-gettextize(1).
- -
- PrzetA°XumaczyA.X to, co jest do przetA°Xumaczenia. W tym celu naleA°Xy zmieniA.X nazwA.X pliku pot na przykA°Xad na doc.XX.po (gdzie XX jest kodem ISO639 jA.Xzyka, na ktA~Xry siA.X tA°Xumaczy, np. ``fr'' dla jA.Xzyka francuskiego) i edytowaA.X powstaA°Xy plik. Zazwyczaj dobrym pomysA°Xem jest nienazywanie tego pliku XX.po, aby uniknA.XA.X pomylenia z tA°Xumaczeniem komunikatA~Xw programu, ale wybA~Xr naleA°Xy do Ciebie. ProszA.X nie zapominaA.X o uaktualnieniu nagA°XA~XwkA~Xw pliku po; sA.X one bardzo waA°Xne.
Do tA°Xumaczenia moA°Xna wykorzystaA.X tryb po Emacsa, program kbabel (oparty na KDE) lub gtranslator (oparty na GNOME) lub jakikolwiek inny program, w zaleA°XnoA°Xci od upodobaA°X tA°Xumacza. MoA°Xna nawet uA°XyA.X dobrego starego edytora vi, mimo A°Xe nie ma on specjalnego trybu uA°XatwiajA.Xcego tA°Xumaczenia.
Aby dowiedzieA.X siA.X czegoA°X wiA.Xcej, stanowczo powinno siA.X przeczytaA.X dokumentacjA.X programu gettext, dostA.XpnA.X w pakiecie gettext-doc.
JAK zamieniA.X tA°Xumaczenie z powrotem do pliku dokumentacji?
Po zakoA°Xczeniu tA°Xumaczenia zapewne naleA°XaA°Xoby wygenerowaA.X przetA°Xumaczone dokumenty i rozdystrybuowaA.X je wA°XrA~Xd uA°XytkownikA~Xw, razem z oryginalnymi dokumentami. Aby to zrobiA.X, naleA°Xy uA°XyA.X programu po4a-translate(1) w ten sposA~Xb (XX jest kodem jA.Xzyka):$ po4a-translate -f <format> -m <master.doc> -p <doc.XX.po> -l <XX.doc>
Jak wczeA°Xniej, <format> jest formatem dokumentu <master.doc>. Jednak tym razem plik po, przekazany w opcji -p, jest czA.XA°XciA.X wejA°Xcia - jest to Twoje tA°Xumaczenie. WyjA°Xcie jest zapisywane w <XX.doc>.
WiA.Xcej szczegA~XA°XA~Xw moA°Xna znaleA°XA.X w <po4a-translate(1)>.
JAK zaktualizowaA.X tA°Xumaczenie programem po4a?
Aby zaktualizowaA.X tA°Xumaczenie, gdy zmieni siA.X oryginalny plik, naleA°Xy uA°XyA.X po4a-updatepo(1) w nastA.XpujA.Xcy sposA~Xb:$ po4a-updatepo -f <format> -m <nowy_oryginalny.doc> -p <istniejA.Xcy.XX.po>
(WiA.Xcej szczegA~XA°XA~Xw moA°Xna znaleA°XA.X w <po4a-updatepo(1)>).
OczywiA°Xcie ta operacja nie spowoduje automagicznego przetA°Xumaczenia nowych akapitA~Xw oryginalnego dokumentu. NaleA°Xy rA.Xcznie uaktualniA.X plik "po". Podobnie naleA°Xy zaktualizowaA.X tA°Xumaczenie akapitA~Xw, ktA~Xre siA.X choA.X trochA.X zmieniA°Xy. Aby mieA.X pewnoA°XA.X, A°Xe A°Xadnego z nich nie ominiesz, zostaA°Xy one zaznaczone jako ``fuzzy'' (niepewne) i zanim po4a-translate bA.Xdzie mA~XgA°X ich uA°XyA.X, to zaznaczenie musi zostaA.X usuniA.Xte. Tak jak w przypadku pierwszego tA°Xumaczenia najlepiej jest uA°XyA.X ulubionego edytora.
Kiedy plik "po" bA.Xdzie znowu aktualny, bez A°Xadnych wpisA~Xw nieprzetA°Xumaczonych lub niepewnych (``fuzzy''), moA°Xna wygenerowaA.X przetA°Xumaczony plik dokumentacji, tak jak to opisano w poprzedniej sekcji.
JAK skonwertowaA.X istniejA.Xce tA°Xumaczenia do po4a?
CzA.Xsto siA.X zdarzaA°Xo, A°Xe tA°XumaczyA°XeA°X dokument rA.Xcznie dopA~Xty, dopA~Xki nie nastA.XpiA°Xa wiA.Xksza reorganizacja oryginalnego dokumentu. W tej sytuacji, po kilku nieprzyjemnych prA~Xbach z diffem lub podobnymi narzA.Xdziami, moA°Xesz zechcieA.X skonwertowaA.X dokument do po4a. OczywiA°Xcie naleA°Xy go skonwertowaA.X tak, aby nie utraciA.X istniejA.Xcych tA°XumaczeA°X. Nie naleA°Xy siA.X obawiaA.X, ten przypadek takA°Xe jest obsA°Xugiwany przez po4a i jest nazywany procesem przechodzenia do formatu gettext.KluczowA.X kwestiA.X jest to, aby struktura tA°Xumaczonego dokumentu byA°Xa taka sama jak oryginaA°Xu, tak A°Xeby narzA.Xdzia mogA°Xy odpowiednio dopasowaA.X zawartoA°XA.X.
JeA°Xli masz szczA.XA°Xcie (tj. struktura obu dokumentA~Xw dokA°Xadnie do siebie pasuje), wszystko zadziaA°Xa bez A°Xadnego problemu i bA.Xdzie gotowe w ciA.Xgu paru sekund. W przeciwnym razie moA°Xesz zrozumieA.X dlaczego ten proces ma takA.X brzydkA.X nazwA.X i przygotuj siA.X na doA°XA.X nieprzyjemnA.X pracA.X. W kaA°Xdym razie, pamiA.Xtaj, A°Xe jest to cena za komfort, ktA~Xry pA~XA°Xniej dostarczy po4a. Dobre w tym wszystkim jest to, A°Xe trzeba to zrobiA.X tylko raz.
Nie bA.XdA.X siA.X dA°Xugo nad tym rozwodziA°X. Aby uA°XatwiA.X proces, waA°Xne jest znalezienie dokA°Xadnie tej wersji oryginaA°Xu, ktA~Xra byA°Xa przetA°Xumaczona. Najlepiej, jeA°Xli zanotowaA°XeA°X sobie wersjA.X z CVS-u dokumentu uA°Xytego do tA°Xumaczenia i jej nie modyfikowaA°XeA°X w procesie tA°Xumaczenia, tak A°Xe moA°Xesz jej teraz uA°XyA.X.
Nie zadziaA°Xa to dobrze, jeA°Xli uA°Xyje siA.X uaktualnionego tekstu oryginaA°Xu ze starym tA°Xumaczeniem. Pozostaje to moA°Xliwe, ale jest to trudniejsze i naprawdA.X powinno siA.X tego unikaA.X, gdy tylko jest to moA°Xliwe. JeA°Xeli nie udaA°Xo Ci siA.X znaleA°XA.X ponownie starego oryginaA°Xu, to najlepszym rozwiA.Xzaniem jest znalezienie kogoA°X, kto przeprowadzi za Ciebie proces przechodzenia na format gettext (ale, proszA.X, niech nie bA.XdA.X to ja ;).
ByA.X moA°Xe zbytnio w tym momencie dramatyzujA.X. Jednak nawet, gdy proces siA.X nie udaje, pozostaje mimo wszystko szybszA.X drogA.X niA°X tA°Xumaczenie wszystkiego od nowa. UdaA°Xo mi siA.X przepuA°XciA.X przez ten proces francuskie tA°Xumaczenie dokumentacji Perla w ciA.Xgu jednego dnia, nawet wtedy, gdy wszystko szA°Xo A°Xle. ByA°Xo to ponad dwa megabajty tekstu, ktA~Xrego tA°Xumaczenie od nowa trwaA°Xoby miesiA.Xcami lub dA°XuA°Xej.
ProszA.X najpierw pozwoliA.X mi wyjaA°XniA.X podstawy tej procedury, a potem powrA~XcA.X do wskazA~Xwek, co zrobiA.X, gdy proces siA.X nie udaje. Dla lepszego zrozumienia, weA°Xmy jako przykA°Xad ponownie moduA°X sgml, jednak tak naprawdA.X uA°Xyty format nie ma A°Xadnego znaczenia.
Kiedy juA°X zdobA.Xdziesz stary oryginaA°X dokumentu, proces przechodzenia na gettext moA°Xe byA.X tak A°Xatwy, jak:
$ po4a-gettextize -f <format> -m <stary.oryginaA°X> -l <stare.tA°Xumaczenie> -p <doc.XX.po>
JeA°Xli masz szczA.XA°Xcie, to to wszystko. Stare tA°Xumaczenia zostaA°Xy skonwertowane do po4a i moA°Xna od razu zaczA.XA.X ich aktualizowanie. NaleA°Xy tylko trzymajA.Xc siA.X procedury opisanej kilka sekcji wczeA°Xniej, zsynchronizowaA.X plik po z najnowszym oryginalnym dokumentem i odpowiednio zaktualizowaA.X tA°Xumaczenia.
ProszA.X zauwaA°XyA.X, A°Xe nawet jeA°Xli wydaje siA.X, A°Xe wszystko zadziaA°XaA°Xo poprawnie, moA°Xe siA.X okazaA.X, A°Xe jednak wystA.XpiA°Xy bA°XA.Xdy podczas tego procesu. Po4a nie rozumie przetwarzanych tekstA~Xw, wiA.Xc nie moA°Xe byA.X byA.X pewne, A°Xe tA°Xumaczenia sA.X poprawnie przypisane do oryginaA°XA~Xw. Dlatego wszystkie komunikaty sA.X oznaczone jako ``fuzzy'' (niepewne). Przed usuniA.Xciem tych znacznikA~Xw, proszA.X uwaA°Xnie sprawdziA.X kaA°Xde tA°Xumaczenie.
Bardzo czA.Xsto struktury dokumentA~Xw nie pasujA.X dokA°Xadnie do siebie, przez co po4a-gettextize nie moA°Xe poprawnie wykonaA.X swojego zadania. W tym punkcie gra toczy siA.X o to, aby tak pozmieniaA.X pliki, aby ich cholerne struktury sobie odpowiadaA°Xy.
Pomocne moA°Xe byA.X przeczytanie poniA°Xej sekcji ``Proces przeksztaA°Xcania do formatu gettext: jak to dziaA°Xa?''. Zrozumienie wewnA.Xtrznych procesA~Xw pomoA°Xe wykonaA.X zadanie. Plusem jest to, A°Xe w razie niepowodzenia, po4a-gettextize gA°XoA°Xno powie, co poszA°Xo A°Xle, umoA°XliwiajA.Xc poznanie komunikatA~Xw, ktA~Xre do siebie nie pasowaA°Xy, ich pozycjA.X w tekA°Xcie i typ kaA°Xdego z nich. Co wiA.Xcej, plik po wygenerowany do tej pory, bA.Xdzie zachowany jako gettextization.failed.po.
- -
- NaleA°Xy usunA.XA.X wszystkie dodatkowe czA.XA°Xci tA°Xumaczenia, takie jak sekcja, w ktA~Xrej podano nazwisko tA°Xumacza i podziA.Xkowania dla wszystkich ludzi, ktA~Xrzy pomagali przy tA°Xumaczeniu. PA~XA°Xniej takie czA.XA°Xci bA.Xdzie moA°Xna z powrotem dodaA.X, uA°XywajA.Xc zaA°XA.XcznikA~Xw, opisanych w nastA.Xpnym rozdziale.
- -
- Nie wahaj siA.X edytowaA.X zarA~Xwno pliku oryginalnego, jak i jego tA°Xumaczenia. NajwaA°XniejszA.X rzeczA.X jest otrzymanie pliku po. Potem bA.Xdzie moA°Xna go zaktualizowaA.X. Edytowanie tA°XumaczeA°X powinno byA.X jednak preferowane, poniewaA°X uproA°Xci to pewne rzeczy po zakoA°Xczeniu siA.X procesu przeksztaA°Xcania na format gettext.
- -
- JeA°Xli jest taka potrzeba, naleA°Xy usunA.XA.X kilka czA.XA°Xci oryginalnego dokumentu, ktA~Xre nie sA.X przetA°Xumaczone. PA~XA°Xniej podczas synchronizowania po z dokumentem czA.XA°Xci te siA.X pojawiA.X same.
- -
- JeA°Xli w niewielkim stopniu zmieniA°XeA°X strukturA.X dokumentu (poA°XA.Xczenie dwA~Xch akapitA~Xw, albo podzielenie innego akapitu), wycofaj te zmiany. JeA°Xli te zmiany miaA°Xy zwiA.Xzek z problemami wystA.XpujA.Xcym w oryginalnym dokumencie, powinieneA°X poinformowaA.X o nich jego autora. KorzyA°Xci z poprawienie ich tylko w Twoim tA°Xumaczeniu bA.Xdzie miaA°Xa tyko czA.XA°XA.X spoA°XecznoA°Xci. Co wiA.Xcej, takie poprawki nie sA.X moA°Xliwe, gdy siA.X uA°Xywa po4a.
- -
- Czasami zawartoA°Xci akapitA~Xw siA.X zgadzajA.X, ale ich typy nie. Poprawienie tego zaleA°Xy od formatu. W formatach pod i nroff, czA.Xsto bierze siA.X to z tego, A°Xe jeden z tych dwA~Xch akapitA~Xw zawiera liniA.X zaczynajA.XcA.X siA.X od biaA°Xego znaku, a drugi - nie. W tych formatach tekst takich akapitA~Xw nie moA°Xe byA.X zawijany i dlatego wystA.Xpuje niezgodnoA°XA.X typA~Xw. RozwiA.Xzaniem jest usuniA.Xcie spacji. MoA°Xe to byA.X takA°Xe literA~Xwka w nazwie elementu.
Podobnie, dwa akapity mogA.X zostaA.X scalone razem w formacie pod, jeA°Xeli rozdzielajA.Xca linia zawiera spacje lub kiedy brakuje pustej linii przed liniA.X ==item i zawartoA°XciA.X tego elementu.
- -
- Czasami wystA.Xpuje rozsynchronizowanie miA.Xdzy plikami i tA°Xumaczenie jest przypisane do zA°Xego akapitu oryginaA°Xu. Jest to oznaka, A°Xe w rzeczywistoA°Xci problem leA°Xy w plikach. ProszA.X znaleA°XA.X w gettextization.failed.po miejsce, gdzie zaczyna siA.X rozsynchronizowanie, a nastA.Xpnie poprawiA.X w tym miejscu pliki wejA°Xciowe.
- -
- Czasami moA°Xe siA.X wydawaA.X, A°Xe po4a zjadA°Xo jakA.XA°X czA.XA°XA.X tekstu albo z oryginaA°Xu, albo z tA°Xumaczenia. gettextization.failed.po wskazuje, A°Xe oba pliki dokA°Xadnie do siebie pasowaA°Xy, a przetwarzanie koA°Xczy siA.X bA°XA.Xdem poniewaA°X nastA.XpiA°Xa prA~Xba dopasowania jakiegoA°X akapitu do akapitu po (lub przed) tym wA°XaA°Xciwym, tak jakby ten wA°XaA°Xciwy siA.X ulotniA°X. MoA°Xna tylko klA.XA.X na po4a, tak jak ja klA.XA°Xem, gdy mi siA.X to zdarzyA°Xo po raz pierwszy. Serio.
Ta nieszczA.XA°Xliwa sytuacja zdarza siA.X, kiedy ten sam akapit jest powtA~Xrzony w dokumencie. W tym przypadku nie jest tworzony nowy wpis w pliku po, ale dodawane jest tylko nowe odwoA°Xanie do juA°X istniejA.Xcego wpisu.
Tak wiA.Xc, kiedy ten sam akapit pojawia siA.X dwa razy w oryginalnym dokumencie, ale nie jest przetA°Xumaczony w dokA°Xadnie ten sam sposA~Xb, moA°Xna mieA.X wraA°Xenie, A°Xe ten akapit oryginaA°Xu zniknA.XA°X. Wystarczy usunA.XA.X nowe tA°Xumaczenie. JeA°Xli preferowaA°XbyA°X usuniA.Xcie pierwszego z tych tA°XumaczeA°X, bo drugie jest lepsze, po prostu przenieA°X drugie tA°Xumaczenie w miejsce pierwszego.
Odwrotnie, jeA°Xli dwa podobne, ale jednak rA~XA°Xne, akapity byA°Xy przetA°Xumaczone dokA°Xadnie tak samo, to jeden akapit tA°Xumaczenia zniknie. RozwiA.Xzaniem jest dodanie gA°Xupiego tekstu do oryginalnego akapitu (takiego jak ``rA~XA°XniA.X siA.X''). Nie trzeba siA.X tego baA.X, takie rzeczy zniknA.X podczas synchronizacji, a kiedy taki tekst jest wystarczajA.Xco krA~Xtki, gettext dopasuje Twoje tA°Xumaczenie do istniejA.Xcego tekstu (oznaczajA.Xc je jako niepewne [``fuzzy''], czym nie powinno siA.X przejmowaA.X, gdyA°X wszystkie komunikaty sA.X tak oznaczone zaraz po procesie przeksztaA°Xcania na format gettext).
Mamy nadziejA.X, A°Xe te porady pomogA.X w procesie przeksztaA°Xcania do formatu gettext i w otrzymaniu pliku po. MoA°Xna teraz ten plik zsynchronizowaA.X i zaczA.XA.X go tA°XumaczyA.X. ProszA.X zauwaA°XyA.X, A°Xe w wypadku dA°Xugich plikA~Xw, pierwsza synchronizacja moA°Xe zajA.XA.X duA°Xo czasu.
Na przykA°Xad, pierwsze wykonanie po4a-updatepo na francuskim tA°Xumaczeniu dokumentacji Perla (plik po o rozmiarze 5.5 Mb) zajA.XA°Xo okoA°Xo dwA~Xch dni na komputerze 1Ghz G5. Tak, 48 godzin. Ale kolejne zajmujA.X tylko kilkanaA°Xcie sekund na moim starym laptopie. Dzieje siA.X tak, poniewaA°X na samym poczA.Xtku wiA.XkszoA°XA.X msgid pliku po nie pasuje do A°Xadnego msgid w pliku pot. Wymusza to na programie gettext wyszukiwanie najbardziej zbliA°Xonego msgid, uA°XywajA.Xc kosztownego algorytmu bliskoA°Xci A°XaA°XcuchA~Xw znakA~Xw.
JAK dodaA.X dodatkowy tekst do tA°XumaczeA°X (np. nazwisko tA°Xumacza)?
Z powodu rozwiA.XzaA°X stosowanych przez gettext, zrobienie tego moA°Xe byA.X trudniejsze w po4a niA°X byA°Xo wczeA°Xniej, kiedy to plik byA°X po prostu rA.Xcznie edytowany. Jednak pozostaje to moA°Xliwe, dziA.Xki tak zwanym zaA°XA.Xcznikom.Dla lepszego zrozumienia moA°Xna przyjA.XA.X, A°Xe zaA°XA.Xczniki sA.X rodzajem A°Xat (patch) aplikowanych do przetA°Xumaczonego dokumentu po zakoA°Xczeniu przetwarzania. RA~XA°XniA.X siA.X one od zwykA°Xych A°Xat (majA.X tylko jednA.X liniA.X kontekstu, ktA~Xra moA°Xe zawieraA.X wyraA°Xenie regularne Perla, i mogA.X tylko dodawaA.X nowy tekst bez usuwania czegokolwiek), ale funkcjonalnoA°XA.X jest taka sama.
Celem jest danie tA°Xumaczowi moA°XliwoA°Xci doA°XA.Xczenie do dokumentu dodatkowej zawartoA°Xci, ktA~Xra nie jest tA°Xumaczeniem oryginalnego dokumentu. NajczA.XA°Xciej uA°Xywany jest do dodawania sekcji dotyczA.Xcej samego tA°Xumaczenia, wypisania wspA~XA°XpracownikA~Xw lub podania sposobu zgA°Xaszania bA°XA.XdA~Xw znalezionych w tA°Xumaczeniu.
ZaA°XA.Xcznik musi byA.X podany jako osobny plik, ktA~Xrego pierwsza linia zawiera nagA°XA~Xwek okreA°XlajA.Xcy, gdzie naleA°Xy umieA°XciA.X tekst zaA°XA.Xcznika. Reszta pliku zaA°XA.Xcznika bA.Xdzie umieszczona bez zmian w okreA°Xlonej pozycji wynikowego dokumentu.
SkA°Xadnia nagA°XA~Xwka jest caA°Xkiem sztywna: musi zaczynaA.X siA.X od tekstu ``PO4A-HEADER:'' poprzedzajA.Xcego rozdzielonA.X A°Xrednikami (;) listA.X pA~Xl ``klucz=wartoA°XA.X''. Spacje SA.X istotne. ProszA.X zauwaA°XyA.X, A°Xe nie moA°Xna uA°XyA.X A°XrednikA~Xw (;) w wartoA°Xci, a ich cytowanie za pomocA.X odwrotnego ukoA°Xnika nie pomaga.
Tak, brzmi to strasznie, ale poniA°Xsze przykA°Xady powinny pomA~Xc w napisaniu odpowiedniej linii nagA°XA~Xwka. Aby zilustrowaA.X dyskusjA.X, zaA°XA~XA°Xmy, A°Xe chcemy dodaA.X sekcjA.X ``O tA°Xumaczeniu'' zaraz po sekcji ``O dokumencie''.
Kilka moA°Xliwych kluczy nagA°XA~Xwka:
- position (obowiA.Xzkowe)
- wyraA°Xenie regularne. ZaA°XA.Xcznik bA.Xdzie umieszczony w pobliA°Xu linii pasujA.Xcej do wyraA°Xenia regularnego. ProszA.X zauwaA°XyA.X, A°Xe mA~Xwimy tutaj o dokumencie przetA°Xumaczonym, a nie o oryginale. JeA°Xli wiA.Xcej niA°X jedna linia pasuje do tego wyraA°Xenia, dodawanie zaA°XA.Xcznika siA.X nie powiedzie. Istotnie, lepiej jest zgA°XosiA.X bA°XA.Xd niA°X wstawiA.X zaA°XA.Xcznik w nieodpowiednie miejsc.
TA.X liniA.X bA.Xdziemy dalej nazywaA.X punktem pozycji. Punkt, w ktA~Xrym zaA°XA.Xcznik jest dodawany nazwiemy punktem wstawienia. Te dwa punkty sA.X blisko siebie, ale nie sA.X sobie rA~Xwne. Na przykA°Xad, aby dodaA.X nowA.X sekcjA.X A°Xatwiej zaczepiA.X punkt pozycji na tytule poprzedniej sekcji i wytA°XumaczyA.X programowi po4a, gdzie ta sekcja siA.X koA°Xczy (naleA°Xy pamiA.XtaA.X, A°Xe punkt pozycji jest podany przez wyraA°Xenie regularne, ktA~Xre powinno dopasowywaA.X siA.X do pojedynczej linii).
ZaleA°XnoA°XA.X miejsca punktu wstawienia w stosunku do punkty pozycji jest okreA°Xlana przez pola "mode", "beginboundary" i "endboundary", opisane poniA°Xej.
W naszym przypadku byA°Xoby to:
position=<title>O dokumencie</title>
- mode (obowiA.Xzkowe)
- MoA°Xe byA.X to jeden z nastA.XpujA.Xcych A°XaA°XcuchA~Xw znakA~Xw: ``before'' (= przed) lub ``after'' (= po), okreA°XlajA.Xcych pozycjA.X dodatku w stosunku do punktu pozycji.
PoniewaA°X chcemy nowA.X sekcjA.X umieA°XciA.X pod tA.X, ktA~XrA.X wyszukaliA°Xmy, mamy:
mode=after
- beginboundary (uA°Xywany, gdy mode=after i obowiA.Xzkowy w tym wypadku)
- endboundary (jak wyA°Xej)
- wyraA°Xenie regularne pasujA.Xce do koA°Xca sekcji, po ktA~Xrej jest dodawany zaA°XA.Xcznik.
W trybie ``after'' punkt wstawienia jest za punktem pozycji, ale nie bezpoA°Xrednio za! Jest on umieszczony na koA°Xcu sekcji zaczynajA.Xcej siA.X w punkcie pozycji, czyli za albo przed liniA.X pasujA.XcA.X do argumentu "???boundary" w zaleA°XnoA°Xci od tego, czy byA°Xo uA°Xyte "beginboundary", czy "endboundary".
W rozpatrywanym przypadku moA°Xemy wybraA.X wskazanie koA°Xca dopasowywanej sekcji, dodajA.Xc:
endboundary=</section>
albo moA°Xemy wskazaA.X poczA.Xtek kolejnej sekcji w nastA.XpujA.Xcy sposA~Xb:
beginboundary=<section>
W obu wypadkach zaA°XA.Xcznik bA.Xdzie umieszczony po </section>, a przed <section>. Ten pierwszy sposA~Xb dziaA°Xa lepiej, poniewaA°X zadziaA°Xa nawet wtedy, gdy dokument zostanie zreorganizowany.
Obie formy istniejA.X poniewaA°X formaty dokumentacji sA.X rA~XA°Xne. NiektA~Xre z nich zawierajA.X znacznik koA°Xca sekcji (tak jak "</section>", ktA~Xrej wA°XaA°Xnie uA°XyliA°Xmy), a inne (np. nroff) tego koA°Xca nie oznaczajA.X w A°Xaden szczegA~Xlny sposA~Xb. W pierwszym przypadku boundary powinno odpowiadaA.X koA°Xcowi sekcji, tak A°Xe punkt wstawienia nastA.Xpuje po niej. W drugim przypadku boundary powinno pasowaA.X do poczA.Xtku nastA.Xpnej sekcji, a punkt wstawienia powinien byA.X umieszczony zaraz przed niA.X.
MoA°Xe siA.X to wydawaA.X niejasne, nastA.Xpne przykA°Xady powinny co nieco wyklarowaA.X.
- PodsumowujA.Xc przykA°Xady podane do tej pory: aby dodaA.X sekcjA.X "O tA°Xumaczeniu" po sekcji "O dokumencie" w dokumencie sgml, naleA°Xy uA°XyA.X jednej z poniA°Xszych linii nagA°XA~Xwka:
-
PO4A-HEADER: mode=after; position=O dokumencie; endboundary=</section> PO4A-HEADER: mode=after; position=O dokumencie; beginboundary=<section>
- Aby dodaA.X coA°X po nastA.XpujA.Xcej sekcji nroff:
-
.SH "AUTORZY"
powinno siA.X ustawiA.X "positon" pasujA.Xce do tej linii oraz "beginboundary" pasujA.Xce do poczA.Xtku nastA.Xpnej sekcji (tj. "^\.SH"). ZaA°XA.Xcznik zostanie dodany po punkcie pozycji i zaraz przed pierwszA.X liniA.X pasujA.XcA.X do "beginboundary". Czyli:
PO4A-HEADER:mode=after;position=AUTORZY;beginboundary=\.SH
- Aby zamiast dodawaA.X caA°XA.X sekcjA.X, dodaA.X coA°X do jakiejA°X sekcji (np. po "Copyright Big Dude"), trzeba podaA.X "position" pasujA.Xce do tej linii i "beginboundary" pasujA.Xce do jakiejkolwiek linii.
-
PO4A-HEADER:mode=after;position=Copyright Big Dude, 2004;beginboundary=^
- Aby dodaA.X coA°X na koA°Xcu dokumentu, naleA°Xy podaA.X "position" pasujA.Xce do jakiejkolwiek linii pliku (ale tylko jednej linii. Po4a nie przetworzy tego, jeA°Xli linia nie bA.Xdzie unikatowa) i podaA.X "endboundary" nie pasujA.Xce do niczego. Nie naleA°Xy uA°XywaA.X tutaj prostych tekstA~Xw jak ""EOF"", tylko takich, ktA~Xre majA.X maA°Xe szanse pojawienia siA.X w dokumencie.
-
PO4A-HEADER:mode=after;position=<title>O dokumencie</title>;beginboundary=NieistniejA.XaLiniaPo4a
W kaA°Xdym wypadku naleA°Xy pamiA.XtaA.X, A°Xe sA.X to wyraA°Xenia regularne. Na przykA°Xad, aby dopasowaA.X koniec sekcji nroff, koA°XczA.Xcej siA.X liniA.X
.fi
nie naleA°Xy uA°XywaA.X ".fi" jako endboundary, poniewaA°X bA.Xdzie on pasowaA°X do ``the[ fi]le'' co raczej nie jest tym, czego moA°Xna by oczekiwaA.X. Poprawnym endboundary w tym przypadku jest "^\.fi$".
JeA°Xli zaA°XA.Xcznik nie trafiA°X tam, gdzie powinien, sprA~Xbuj przekazaA.X narzA.Xdziom po4a argument -vv, ktA~Xry powinien pomA~Xc wyjaA°XniA.X co siA.X dzieje podczas dodawania zaA°XA.Xcznika.
Bardziej szczegA~XA°Xowy przykA°Xad
Oryginalny dokument (w formacie pod):
|=head1 NAZWA | |dummy - fikcyjny program | |=head1 AUTOR | |ja
Wtedy nastA.XpujA.Xcy dodatek spowoduje dodanie sekcji (w jA.Xzyku francuskim) na koniec tego pliku (w jA.Xz. francuskim ``TRADUCTEUR'' oznacza ``TA°XUMACZ'', a ``moi'' znaczy ``ja'')
|PO4A-HEADER:mode=after;position=AUTEUR;beginboundary=^=head | |=head1 TRADUCTEUR | |moi
Aby umieA°XciA.X dodatek przed sekcjA.X AUTOR, naleA°Xy uA°XyA.X nastA.XpujA.Xcego nagA°XA~Xwka:
PO4A-HEADER:mode=after;position=NOM;beginboundary=^=head1
To dziaA°Xa, poniewaA°X nastA.XpnA.X liniA.X pasujA.XcA.X do beginboundary /^=head1/ po sekcji ``NAZWA'' (przetA°Xumaczonej na francuskie ``NOM'') jest linia opisujA.Xca autorA~Xw. Tak wiA.Xc zaA°XA.Xcznik zostanie umieszczony pomiA.Xdzy obiema sekcjami.
JAK to wszystko zrobiA.X, wywoA°XujA.Xc tylko jeden program?
UA°Xytkownicy udowodnili, A°Xe takie uA°Xycie po4a jest naraA°Xone na bA°XA.Xdy, poniewaA°X naleA°Xy we wA°XaA°Xciwym porzA.Xdku wywoA°XaA.X dwa rA~XA°Xne programy (po4a-updatepo, a nastA.Xpnie po4a-translate), z ktA~Xrych kaA°Xdy wymaga podania wiA.Xcej niA°X 3 argumentA~Xw. Co wiA.Xcej, w tym systemie byA°Xo trudno uA°XyA.X tylko jednego pliku po dla wszystkich dokumentA~Xw, kiedy uA°Xyto wiA.Xcej niA°X jednego formatu.Program po4a(1) zaprojektowano, aby rozwiA.XzaA.X te trudnoA°Xci. Kiedy tylko projekt zostanie skonwertowany do tego systemu, moA°Xna napisaA.X prosty plik konfiguracyjny opisujA.Xcy miejsce poA°XoA°Xenia plikA~Xw tA°XumaczeA°X (po i pot) i oryginalnych dokumentA~Xw, ich formaty oraz miejsce, gdzie powinny trafiaA.X przetA°Xumaczone dokumenty.
Uruchomienie po4a(1) na tym pliku spowoduje zsynchronizowanie wszystkich plikA~Xw po z oryginalnym dokumentem, tak A°Xeby przetA°Xumaczony dokument zostaA°X poprawnie wygenerowany. OczywiA°Xcie naleA°Xy ten program wywoA°XaA.X dwa razy: raz przed edytowaniem pliku po, A°Xeby go zaktualizowaA.X, i raz po jego edycji, aby otrzymaA.X caA°Xkowicie aktualny przetA°Xumaczony dokument . Tylko A°Xe potrzebujesz zapamiA.XtaA.X tylko jednA.X komendA.X linii poleceA°X.
Jak to dziaA°Xa?
Ten rozdziaA°X zawiera krA~Xtki opis wewnA.Xtrznych mechanizmA~Xw po4a, tak A°Xe bA.Xdziesz miaA°X wiA.Xcej odwagi, aby pomA~Xc nam w jego tworzeniu i udoskonalaniu. MoA°Xe takA°Xe Ci pomA~Xc w zrozumieniu, dlaczego nie dziaA°Xa tak, jak byA°X tego oczekiwaA°X, oraz jak rozwiA.XzaA.X napotkane problemy.Jaki jest tu duA°Xy obrazek?
Architektura po4a jest zorientowana obiektowo (w Perlu, czy to nie eleganckie?). WspA~Xlny przodek wszystkich klas parserA~Xw zwie siA.X TransTractor. Ta dziwna nazwa wziA.XA°Xa siA.X stA.Xd, A°Xe jest on odpowiedzialny za tA°Xumaczenie dokumentu i wydobywanie komunikatA~Xw.Bardziej formalnie mA~XwiA.Xc, pobiera dokument do przetA°Xumaczenia oraz plik po zawierajA.Xcy tA°Xumaczenia uA°Xywany jako wejA°Xcie podczas tworzenia dwA~Xch oddzielnych plikA~Xw wyjA°Xciowych: innego pliku po (wyniku wyodrA.Xbniania komunikatA~Xw z dokumentu wejA°Xciowego) oraz przetA°Xumaczonego dokumentu (majA.Xcego takA.X samA.X strukturA.X jak plik wejA°Xciowy, ale ze wszystkimi komunikatami zamienionymi na zawartoA°XA.X wejA°Xciowego pliku po). PoniA°Xej jest graficzne przedstawienie tego procesu:
Dokument wejA°Xciowy -\ /-> Dokument wyjA°Xciowy \ TransTractor:: / (przetA°Xumaczony) +-->-- parse() --- -+ / \ WejA°Xciowy po -------/ \---> WyjA°Xciowy po (wyodrA.Xbniony)
Ta maA°Xa koA°XA.X jest podstawA.X caA°Xej architektury po4a. JeA°Xli pominiesz wejA°Xciowy plik po i dokument wyjA°Xciowy, otrzymasz po4a-gettextize. JeA°Xli podasz oba pliki wejA°Xciowe i zlekcewaA°Xysz wyjA°Xciowy plik po, otrzymasz po4a-translate.
TransTractor::parse() jest wirtualnA.X funkcjA.X zaimplementowanA.X w kaA°Xdym module. Tutaj podano prosty przykA°Xad, A°Xeby zobrazowaA.X jej dziaA°Xanie. Przetwarza listA.X akapitA~Xw, z ktA~Xrych kaA°Xdy zaczyna siA.X od <p>.
1 sub parse { 2 PARAGRAPH: while (1) { 3 $my ($paragraph,$pararef,$line,$lref)=("","","",""); 4 $my $first=1; 5 while (($line,$lref)=$document->shiftline() && defined($line)) { 6 if ($line =~ m/<p>/ && !$first--; ) { 7 $document->unshiftline($line,$lref); 8 9 $paragraph =~ s/^<p>//s; 10 $document->pushline("<p>".$document->translate($paragraph,$pararef)); 11 12 next PARAGRAPH; 13 } else { 14 $paragraph .= $line; 15 $pararef = $lref unless(length($pararef)); 16 } 17 } 18 return; # Nie otrzymano linii? Koniec pliku wejA°Xciowego. 19 } 20 }
W linii 6. po raz drugi napotkaliA°Xmy <p>. Oznacza to kolejny akapit. PowinniA°Xmy dlatego zwrA~XciA.X otrzymanA.X liniA.X do oryginalnego dokumentu (linia 7.), a na wyjA°Xcie doA°XoA°XyA.X akapit zbudowany do tej pory. Po usuniA.Xciu z niego poczA.Xtkowego <p> w linii 9., dokA°Xadamy ten element poA°XA.Xczony z tA°Xumaczeniem reszty akapitu.
Funkcja translate() jest bardzo fajna (cool ;)). Dodaje swoje argumenty na koniec wynikowego pliku po (ekstrakcja) i zwraca ich tA°Xumaczenie, znalezione w wejA°Xciowym pliku po (tA°Xumaczenie). PoniewaA°X jest uA°Xywana jako czA.XA°XA.X argumentu pushline(), tA°Xumaczenie lA.Xduje w wynikowym dokumencie.
Czy to nie jest fajne? Jest moA°Xliwe zbudowanie kompletnego moduA°Xu po4a w mniej niA°X 20 liniach, jeA°Xeli tylko format jest wystarczajA.Xco prosty...
WiA.Xcej informacji o tym moA°Xna znaleA°XA.X w Locale::Po4a::TransTractor(3pm).
Proces przeksztaA°Xcania do formatu gettext: jak to dziaA°Xa?
Idea jest nastA.XpujA.Xca: pobranie oryginalnego dokumentu i jego tA°Xumaczenia i powiedzenie, A°Xe n-ty komunikat wyodrA.Xbniony z tA°Xumaczenia jest tA°Xumaczeniem n-tego komunikatu wyodrA.Xbnionego z oryginaA°Xu. Aby to zadziaA°XaA°Xo, oba pliki muszA.X mieA.X dokA°Xadnie takA.X samA.X strukturA.X. Na przykA°Xad, jeA°Xeli pliki majA.X poniA°XszA.X strukturA.X, to jest raczej niemoA°Xliwe, by 4. komunikat tA°Xumaczenia (typu ``rozdziaA°X'') byA°X tA°Xumaczeniem 4. komunikatu oryginaA°Xu (typu ``akapit'').OryginaA°X TA°Xumaczenie rozdziaA°X rozdziaA°X akapit akapit akapit akapit akapit rozdziaA°X rozdziaA°X akapit akapit akapit
Aby to osiA.XgnA.XA.X, parsery po4a sA.X uA°Xywane zarA~Xwno na pliku oryginaA°Xu, jak i tA°Xumaczenia, A°Xeby utworzyA.X pliki po, a nastA.Xpnie jest budowany z nich trzeci plik po zawierajA.Xcy komunikaty z drugiego pliku jako tA°Xumaczenia komunikatA~Xw z pierwszego. Aby sprawdziA.X, A°Xe komunikaty, ktA~Xre ze sobA.X A°XA.Xczymy, sA.X rzeczywiA°Xcie odpowiadajA.Xcymi sobie tA°Xumaczeniami, parsesy dokumentA~Xw w po4a powinny umieszczaA.X informacje o typach skA°Xadniowych komunikatA~Xw wyodrA.Xbnionych z dokumentu (wszystkie istniejA.Xce to robiA.X, TwA~Xj teA°X powinien). NastA.Xpnie te informacje sA.X uA°Xywane do sprawdzenia, A°Xe oba dokumenty majA.X tA.X samA.X skA°XadniA.X. W poprzednim przykA°Xadzie pozwoliA°Xo nam to wykryA.X, A°Xe 4. komunikat jest w jednym przypadku akapitem, a w drugim - tytuA°Xem rozdziaA°Xu i zgA°XosiA.X problem.
Teoretycznie byA°Xoby moA°Xliwe zsynchronizowanie plikA~Xw po wykryciu problemu (tak, jak to robi diff). Niestety, nie jest jasne, co zrobiA.X z komunikatami, ktA~Xre nie wystA.XpujA.Xc w jednym z plikA~Xw, byA°Xy przyczynA.X rozsynchronizowania. Dlatego obecna implementacja nie stara siA.X synchronizowaA.X plikA~Xw i zgA°Xasza bA°XA.Xd, kiedy coA°X poszA°Xo A°Xle, wymagajA.Xc od uA°Xytkownika rA.Xcznego zmodyfikowania plikA~Xw w celu rozwiA.Xzania problemu.
Nawet z tymi zabezpieczeniami, rzeczy mogA.X A°Xle siA.X potoczyA.X. WA°XaA°Xnie dlatego wszystkie tA°Xumaczenia odgadniA.Xte w ten sposA~Xb sA.X zaznaczane jako niepewne (``fuzzy''), aby tA°Xumacz je przejrzaA°X i sprawdziA°X.
ZaA°XA.Xcznik: Jak to dziaA°Xa?
Hmm, to caA°Xkiem proste. TA°Xumaczony dokument nie jest bezpoA°Xrednio zapisywany na dysk, ale trzymany w pamiA.Xci, dopA~Xki wszystkie zaA°XA.Xczniki nie zostanA.X dodane. Wykorzystane algorytmy sA.X raczej proste. Szukamy linii pasujA.Xcej do wyraA°Xenia regularnego okreA°XlajA.Xcego pozycjA.X i dodajemy zaA°XA.Xcznik przed tA.X linA.X, jeA°Xli tryb = before. JeA°Xli nie jesteA°Xmy w tym trybie, to szukamy nastA.Xpnej linii pasujA.Xcej do ograniczenia i wstawiamy zaA°XA.Xcznik po tej linii, jeA°Xli jest to "endboundary", lub przed niA.X, jeA°Xli jest to "beginboundary".FAQ
Ten rozdziaA°X zawiera odpowiedzi na czA.Xsto zadawane pytania. Tak naprawdA.X, wiA.XkszoA°XA.X tych pytaA°X moA°Xe byA.X sformuA°Xowanych jako ``Dlaczego po4a zostaA°Xo zaprojektowane tak, a nie inaczej?''. JeA°Xli wydaje Ci siA.X, A°Xe po4a nie jest wA°XaA°Xciwym narzA.Xdziem do tA°Xumaczenia dokumentacji, powinieneA°X rozwaA°XyA.X przeczytanie tego rozdziaA°Xu. JeA°Xli nie znajdziesz w nim odpowiedzi na swoje pytanie, prosimy siA.X z nami skontaktowaA.X poprzez listA.X dyskusyjnA.X <po4a-devel@lists.alioth.debian.org>. Uwielbiamy znaA.X opinie uA°XytkownikA~Xw.Dlaczego trzeba tA°XumaczyA.X kaA°Xdy akapit osobno?
Tak, w po4a, kaA°Xdy akapit jest tA°Xumaczony osobno (w zasadzie, to kaA°Xdy moduA°X o tym decyduje, ale wszystkie istniejA.Xce moduA°Xy tak robiA.X i TwA~Xj takA°Xe powinien). SA.X dwie gA°XA~Xwne przyczyny takiego rozwiA.Xzania:- •
- Kiedy techniczne czA.XA°Xci dokumentu sA.X ukryte, tA°Xumacz nie moA°Xe w nich zrobiA.X baA°Xaganu. Im mniej znacznikA~Xw pokazujemy tA°Xumaczowi, tym mniej bA°XA.XdA~Xw moA°Xe popeA°XniA.X.
- •
- Przycinanie dokumentu pomaga odizolowaA.X zmiany w oryginalnym dokumencie. Kiedy oryginaA°X zostanie zmieniony, ten proces uproA°Xci wyszukanie czA.XA°Xci tA°XumaczeA°X potrzebujA.Xcych aktualizacji.
Nawet biorA.Xc pod uwagA.X te plusy, niektA~Xrym ludziom nie podoba siA.X osobne tA°Xumaczenie kaA°Xdego akapitu. Postaram siA.X odpowiedzieA.X na ich obawy:
- •
- Takie podejA°Xcie sprawdziA°Xo siA.X w projekcie KDE, pozwalajA.Xc temu zespoA°Xowi na wyprodukowanie znacznej iloA°Xci przetA°Xumaczonej i aktualnej dokumentacji.
- •
- TA°Xumacze mogA.X wciA.XA°X uA°XywaA.X kontekstu tA°Xumaczenia, poniewaA°X wszystkie komunikaty w pliku po sA.X w takiej samej kolejnoA°Xci jak w oryginalnym dokumencie. TA°Xumaczenie sekwencyjne jest podobne, niezaleA°Xnie, czy uA°Xywa siA.X po4a czy nie. I w kaA°Xdym wypadku najlepszym sposobem otrzymania kontekstu pozostaje skonwertowanie dokumentu do formatu dokumentu drukowanego, poniewaA°X formaty A°XrA~XdA°Xowe tekstu mogA.X nie byA.X zbyt czytelne.
- •
- Takie podejA°Xcie jest uA°Xywany przez profesjonalnych tA°Xumaczy. Zgadzam siA.X, majA.X oni trochA.X inne cele niA°X tA°Xumacze oprogramowania open-source. Na przykA°Xad moA°XliwoA°XA.X A°Xatwego zarzA.Xdzania tA°Xumaczeniem jest czA.Xsto dla nich mniej istotna, poniewaA°X zawartoA°XA.X rzadko siA.X zmienia.
Dlaczego nie podzieliA.X na zdania (lub mniejsze czA.XA°Xci)?
Profesjonalne narzA.Xdzie tA°Xumaczy czasami dzielA.X dokument na poszczegA~Xlne zdania, aby zmaksymalizowaA.X wykorzystanie wczeA°Xniejszych tA°XumaczeA°X i zwiA.XkszyA.X szybkoA°XA.X tA°Xumaczenia. Problemem jest jednak to, A°Xe w zaleA°XnoA°Xci od kontekstu to samo zdanie moA°Xe mieA.X kilka tA°XumaczeA°X.Akapity sA.X z definicji dA°XuA°Xsze niA°X zdania. JeA°Xeli w dwA~Xch dokumentach ten sam akapit wystA.Xpuje, to moA°Xemy zaA°XoA°XyA.X, A°Xe jego znaczenie (i tA°Xumaczenie) jest takie samo, niezaleA°Xnie od kontekstu.
Dzielenie na czA.XA°Xci mniejsze niA°X zdania byA°Xoby czymA°X bardzo niedobrym. Za duA°Xo miejsca by zajA.XA°Xo napisanie tu wyjaA°Xnienie dlaczego, ale zainteresowany czytelnik moA°Xe na przykA°Xad przeczytaA.X stronA.X podrA.Xcznika Locale::Maketext::TPJ13(3pm) (pochodzA.XcA.X z dokumentacji Perla). W skrA~Xcie, kaA°Xdy jA.Xzyk ma okreA°Xlone zasady skA°Xadniowe i nie istnieje taki sposA~Xb budowania zdaA°X przez A°XA.Xczenie ich czA.XA°Xci, ktA~Xry by dziaA°XaA°X dla wszystkich istniejA.Xcych jA.XzykA~Xw (lub nawet dla tylko 5 czy 10 najpopularniejszych).
Dlaczego nie umieA°XciA.X oryginaA°Xu jako komentarza do tA°Xumaczenia (lub w inny sposA~Xb)?
Na pierwszy rzut oka gettext nie wydaje siA.X byA.X przeznaczony do wszystkich rodzajA~Xw tA°XumaczeA°X. Na przykA°Xad nie wydawaA°X siA.X on byA.X przystosowany do debconfa, interfejsu wszystkich pakietA~Xw Debiana uA°Xywanego do interakcji z uA°Xytkownikiem podczas instalacji. W tym przypadku teksty do tA°Xumaczenia byA°Xy caA°Xkiem krA~Xtkie (tuzin linii dla kaA°Xdego pakietu) i byA°Xo trudno umieA°XciA.X tA°Xumaczenie w specjalnym pliku poniewaA°X musiaA°Xo byA.X dostA.Xpne jeszcze przed zainstalowaniem pakietu.To dlatego opiekun debconfa zdecydowaA°X zaimplementowaA.X inne rozwiA.Xzanie, w ktA~Xrym tA°Xumaczenia sA.X umieszczane w tym samym pliku, co oryginaA°X. Jest to pociA.XgajA.Xce. KtoA°X mA~XgA°Xby nawet chcieA.X coA°X takiego zrobiA.X dla XML-a na przykA°Xad. MA~XgA°Xby on wyglA.XdaA.X tak:
<section> <title lang="en">My title</title> <title lang="fr">Mon titre</title> <para> <text lang="en">My text.</text> <text lang="fr">Mon texte.</text> </para> </section>
Jednak byA°Xo to na tyle problematyczne, A°Xe obecnie jest uA°Xywane rozwiA.Xzanie oparte na plikach po. Tylko oryginalny tekst moA°Xe byA.X edytowany w pliku, a tA°Xumaczenia muszA.X siA.X pojawiA.X w plikach po, wyciA.XgniA.Xtych z gA°XA~Xwnego szablonu (A°XA.Xczonych z powrotem w czasie kompilacji pakietu). Ten stary system jest potA.Xpiany z kilku powodA~Xw:
- •
- problemy w zarzA.Xdzaniu
JeA°Xeli kilku tA°Xumaczy dostarczy A°XatA.X w tym samym czasie, bA.Xdzie trudno poA°XA.XczyA.X te A°Xaty wszystkie razem.
Jak wykryA.X te zmiany w oryginale, ktA~Xre muszA.X byA.X zastosowane w tA°Xumaczeniach? Aby uA°XyA.X programu diff, trzeba byA°Xo zanotowaA.X wersjA.X oryginaA°Xu, ktA~Xra zostaA°Xa przetA°Xumaczone. Tj. potrzebujesz pliku po w Twoim pliku.
- •
- problemy z kodowaniem znakA~Xw
RozwiA.Xzanie to jest dobre tylko dla europejskich jA.XzykA~Xw, jednak wprowadzenie koreaA°Xskiego, rosyjskiego lub arabskiego bardzo wszystko komplikuje. RozwiA.Xzaniem mA~XgA°Xby byA.X UTF, jednak wciA.XA°X jest z nim kilka problemA~Xw.
Co wiA.Xcej takie problemy sA.X trudne do wychwycenia (tj. tylko KoreaA°Xczycy zauwaA°XA.X A°Xe kodowanie znakA~Xw w koreaA°Xskim tekA°Xcie jest zepsute [bo tA°Xumacz byA°X Rosjaninem]).
gettext rozwiA.Xzuje wszystkie te problemy razem.
Ale gettext nie zostaA°X zaprojektowany do takiego uA°Xycia!
To prawda, ale do tej pory nikt nie znalazA°X lepszego rozwiA.Xzania. JedynA.X znanA.X alternatywA.X jest rA.Xczne tA°Xumaczenie ze wszystkimi problemami w jego zarzA.Xdzaniu.Co z innymi narzA.Xdziami do tA°XumaczeA°X dokumentacji wykorzystujA.Xcymi gettext?
O ile mi wiadomo, sA.X tylko dwa takie:- poxml
- Jest to narzA.Xdzie rozwijane przez ludzi z KDE obsA°XugujA.Xce format DocBook XML. O ile mi wiadomo, byA°X to pierwszy program wyciA.XgajA.Xcy A°XaA°Xcuchy znakA~Xw do przetA°Xumaczenia z dokumentacji do plikA~Xw po i wstawiajA.Xcy je z powrotem po przetA°Xumaczeniu.
MoA°Xe on obsA°XugiwaA.X tylko XML i czA.XA°Xciowo DTD. Jestem bardzo niezadowolony z obsA°Xugi list, ktA~Xre zostajA.X umieszczone w jednym wielkim msgid. Kiedy lista staje siA.X dA°Xuga, sprawa siA.X komplikuje.
- po-debiandoc
- Program utworzony przez Denisa Barbiera jest poprzednikiem moduA°Xu sgml po4a, ktA~Xry w mniejszym bA.XdA°X wiA.Xkszym stopniu go zastA.Xpuje, czyniA.Xc przestarzaA°Xym. Zgodnie ze swA.X nazwA.X obsA°Xuguje tylko debiandoc DTD, ktA~Xry jest DTD mniej lub bardziej przestarzaA°Xym.
NajwiA.XkszA.X zaletA.X po4a nad nimi jest A°XatwoA°XA.X umieszczania dodatkowej zawartoA°Xci (co jest nawet gorsze tutaj) i przejA°Xcia na format gettext.
Przekazywanie deweloperom wiedzy o tA°Xumaczeniu
PrA~XbujA.Xc tA°XumaczyA.X dokumentacjA.X lub programy moA°Xna napotkaA.X trzy rodzaje problemA~Xw: lingwistyczne (nie kaA°Xdy mA~Xwi dwoma jA.Xzykami), techniczne (to dlatego istnieje po4a) i ludzkie. Nie wszyscy deweloperzy rozumiejA.X potrzebA.X tA°XumaczeA°X. Nawet majA.Xc dobre chA.Xci, mogA.X ignorowaA.X potrzebA.X upraszczania pracy tA°Xumaczy. Aby w tym pomA~Xc, po4a dostarcza wiele dokumentacji, do ktA~Xrej moA°Xna siA.X odnosiA.X.Innym waA°Xnym punktem jest to, A°Xe kaA°Xdy plik z tA°Xumaczeniem zaczyna siA.X od krA~Xtkiego komentarza okreA°XlajA.Xcego, czym jest ten plik i jak go uA°XyA.X. Powinno to pomA~Xc deweloperom, zalanym tonami plikA~Xw w rA~XA°Xnych jA.Xzykach, ktA~Xrych nie znajA.X, pomA~Xc w poprawnym obsA°XuA°Xeniu tego.
W projekcie po4a przetA°Xumaczone dokumenty nie sA.X plikami A°XrA~XdA°Xowymi. PoniewaA°X jesteA°Xmy przyzwyczajeni do tego, A°Xe pliki sgml sA.X plikami A°XrA~XdA°Xowymi, A°Xatwo jest o pomyA°XkA.X. Dlatego wszystkie pliki zawierajA.X taki nagA°XA~Xwek:
| **************************************************** | * PLIK WYGENEROWANY, NIE EDYTOWAA.X * | * TO NIE JEST PLIK A°XRA~XDA°XOWY, ALE WYNIK KOMPILACJI * | **************************************************** | | Ten plik zostaA°X wygenerowany przez po4a-translate(1). Nie przechowuj go | (na przykA°Xad w CVS-ie), ale przechowuj plik po, uA°Xyty jako plik A°XrA~XdA°Xowy | przez polecenie po4a-translate. | | Tak naprawdA.X, potraktuj ten plik jako plik binarny, a plik po jako zwykA°Xy | plik A°XrA~XdA°Xowy: jeA°Xli plik po zaginie, to bA.Xdzie trudniej zachowaA.X aktualnoA°XA.X | tego tA°Xumaczenia ;)
Podobnie, to co naleA°Xy zrobiA.X ze zwykA°Xymi plikami po programu gettext, to skopiowaA.X je do katalogu po/. Ale w przypadku plikA~Xw zarzA.Xdzanych przez po4a to nie dziaA°Xa. NajwiA.Xkszym ryzykiem tutaj jest to, A°Xe deweloper usunie istniejA.Xce tA°Xumaczenia jego programu wraz z tA°Xumaczeniami dokumentacji. (Oba nie mogA.X byA.X przechowywane w jednym pliku po, poniewaA°X program wymaga instalacji pliku tA°XumaczeA°X jako pliku mo, podczas gdy dokumentacja uA°Xywa tA°XumaczeA°X w czasie kompilacji). Dlatego pliki po tworzone przez moduA°X po-debiandoc zawierajA.X poniA°Xszy nagA°XA~Xwek:
# # RADY DLA DEWELOPERA~XW: # - nie trzeba rA.Xcznie edytowaA.X plikA~Xw POT i PO. # - ten plik zawiera tA°Xumaczenie Twoich szablonA~Xw confiteor. # Nie zastA.Xpuj tA°XumaczeA°X Twojego programu tym plikiem !! # (albo tA°Xumacze bA.XdA.X na Ciebie wA°Xciekli) # # RADY DLA TA°XUMACZY: # JeA°Xli nie jesteA°X zaznajomiony z formatem PO, warto przeczytaA.X # dokumentacjA.X pakietu gettext, zwA°Xaszcza sekcje poA°XwiA.Xcone # temu formatowi. Na przykA°Xad uruchom: # info -n "(gettext)PO Files" # info -n "(gettext)Heder Centry" # # Informacje specyficzne po-debconf sA.X dostA.Xpne w # /usr/share/doc/po-debconf/README-trans # lub http://www.debian.org/intl/l10n/po-debconf/README-trans #
PODSUMOWANIE plusA~Xw i minusA~Xw rozwiA.Xzania opartego na gettext
- •
- TA°Xumaczenia nie sA.X trzymane wraz z oryginaA°Xem, co pozwala w prosty sposA~Xb wykryA.X, czy tA°Xumaczenia nie sA.X przestarzaA°Xe.
- •
- TA°Xumaczenia sA.X przechowywane w oddzielnych plikach, dziA.Xki czemu tA°Xumacze rA~XA°Xnych jA.XzykA~Xw sobie nie przeszkadzajA.X, zarA~Xwno kiedy podsyA°XajA.X swoje tA°Xumaczenia, jak i kiedy zmieniajA.X kodowanie znakA~Xw pliku.
- •
- WewnA.Xtrznie jest oparty na pakiecie "gettext" (ale "po4a" oferuje bardzo prosty interfejs, tak A°Xe nie ma potrzeby poznawania wewnA.Xtrznych mechanizmA~Xw, aby go uA°XyA.X). W ten sposA~Xb, nie musimy ponownie wymyA°XlaA.X koA°Xa, a poniewaA°X gettext jest szeroko uA°Xywany, mamy nadziejA.X, A°Xe w wiA.Xkszym lub mniejszym stopniu jest wolny od bA°XA.XdA~Xw.
- •
- Z punktu widzenia koA°Xcowego uA°Xytkownika nic siA.X nie zmieniA°Xo (poza tym, A°Xe tA°Xumaczenia sA.X lepiej zarzA.Xdzane). Wynikowe pliki z dokumentacjA.X sA.X tak samo dystrybuowane.
- •
- TA°Xumacze nie muszA.X uczyA.X siA.X skA°Xadni nowego pliku i mogA.X po prostu uA°XyA.X swojego ulubionego edytora plikA~Xw po (jak tryb po emasca, kbabel lub gtranslator).
- •
- Gettext udostA.Xpnia prosty sposA~Xb otrzymania statystyk o tym, co zostaA°Xo zrobione, co powinno byA.X przejrzane i zaktualizowane, a co jeszcze jest do zrobienia. PrzykA°Xady moA°Xna znaleA°XA.X pod tymi adresami:
- http://kbabel.kde.org/img/previewKonq.png - http://www.debian.org/intl/l10n/
Nie wszystko zA°Xoto, co siA.X A°Xwieci - to podejA°Xcie ma takA°Xe kilka minusA~Xw, z ktA~Xrymi musimy sobie poradziA.X.
- •
- Na pierwszy rzut oka zaA°XA.Xczniki sA.X... dziwne.
- •
- Nie moA°Xna dostosowywaA.X tA°Xumaczonego tekstu do wA°Xasnych upodobaA°X, na przykA°Xad przez podzielenie w danym miejscu na akapity, poA°XA.Xczenie dwA~Xch innych akapitA~Xw w jeden. Jednak w pewnym sensie, jeA°Xeli jest jakiA°X problem z oryginaA°Xem, powinno to zostaA.X zgA°Xoszone jako bA°XA.Xd.
- •
- Nawet majA.Xc A°Xatwy interfejs, wciA.XA°X pozostaje nowym narzA.Xdziem, ktA~Xrego trzeba siA.X uczyA.X.
Jednym z moich marzeA°X jest zintegrowanie w jakiA°X sposA~Xb po4a z programami gtranslator lub kbabel. Kiedy plik sgml jest otwierany, komunikaty zostajA.X automatycznie wyciA.Xgane. Kiedy jest zamykany, przetA°Xumaczony plik jest zapisywany na dysk. JeA°Xli uda nam siA.X zrobiA.X moduA°X MS Word (TM) (a przynajmniej RFT), to bA.XdA.X mogli go nawet uA°XywaA.X profesjonalni tA°Xumacze.
Znane bA°XA.Xdy i i A°XA.Xdania nowych funkcjonalnoA°Xci
NajwaA°XniejszA.X sprawA.X (oprA~Xcz brakujA.Xcych moduA°XA~Xw) jest obsA°Xuga kodowania znakA~Xw. RozwiA.Xzaniem mogA°Xoby byA.X dodanie pragmy Perla UTF-8 i rekodowanie komunikatA~Xw na wyjA°Xciu, ale nie jest to jeszcze zrobione.ChcielibyA°Xmy wydzieliA.X czA.XA°XA.X kodu (dotyczA.Xcego wstawiania plikA~Xw) moduA°Xu sgml z powrotem do TransTractora, tak A°Xeby pozostaA°Xe moduA°Xy mogA°Xy z niego korzystaA.X, ale to nie bA.Xdzie zmiana widoczna dla uA°Xytkownika.
AUTORZY
Denis Barbier <barbier,linuxfr.org> Martin Quinson (mquinson#debian.org)
TA°XUMACZENIE
Robert Luberda <robert@debian.org>
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre