Rechercher une page de manuel
po4a
Langue: pl
Version: 2010-06-01 (fedora - 01/12/10)
Section: 7 (Divers)
Sommaire
- NAZWA
- WstÄp
- Spis treÅci
- Dlaczego używaÄ po4a? Do czego jest on przydatny?
- Jak używaÄ po4a?
- Graficzne podsumowanie
- JAK zaczÄ Ä nowe tÅumaczenie?
- JAK zamieniÄ tÅumaczenie z powrotem do pliku dokumentacji?
- JAK zaktualizowaÄ tÅumaczenie programem po4a?
- JAK skonwertowaÄ istniejÄ ce tÅumaczenia do po4a?
- JAK dodaÄ dodatkowy tekst do tÅumaczeÅ (np. nazwisko tÅumacza)?
- JAK to wszystko zrobiÄ, wywoÅujÄ c tylko jeden program?
- Jak to dziaÅa?
- FAQ
- Dlaczego trzeba tÅumaczyÄ każdy akapit osobno?
- Dlaczego nie podzieliÄ na zdania (lub mniejsze czÄÅci)?
- Dlaczego nie umieÅciÄ oryginaÅu jako komentarza do tÅumaczenia (lub w inny sposób)?
- Ale gettext nie zostaŠzaprojektowany do takiego użycia!
- Co z innymi narzÄdziami do tÅumaczeÅ dokumentacji wykorzystujÄ cymi gettext?
- Przekazywanie deweloperom wiedzy o tÅumaczeniu
- PODSUMOWANIE plusów i minusów rozwiÄ zania opartego na gettext
- Znane bÅÄdy i i Å¼Ä dania nowych funkcjonalnoÅci
- AUTORZY
- TÅUMACZENIE
NAZWA
po4a - narzÄdzia do tÅumaczeÅ dokumentacji i innych materiaÅówWstÄp
Celem projektu po4a (``po for anything'') jest uÅatwienie tÅumaczeÅ (oraz, co ciekawsze, zarzÄ dzania tÅumaczeniami) przy użyciu narzÄdzi gettext w tych obszarach, gdzie nie byÅy używane, jak na przykÅad w obszarze dokumentacji.Spis treÅci
Dokument jest zorganizowany nastÄpujÄ co:- 1. Dlaczego powinno siÄ używaÄ po4a? Jakie sÄ jego zalety?
- Ten rozdziaÅ wprowadzenia wyjaÅnia motywy i filozofiÄ projektu. Jeżeli rozważasz użycie po4a do Twoich tÅumaczeÅ, powinieneÅ najpierw przeczytaÄ ten rozdziaÅ.
- 2. Jak używaÄ po4a?
- RozdziaÅ ten jest rodzajem podrÄcznika i próbuje odpowiedzieÄ na pytania użytkowników, pozwalajÄ
c lepiej zrozumieÄ caÅy proces. Odpowiada, jak wykonaÄ różne rzeczy w po4a, i sÅuży jako wprowadzenie do dokumentacji konkretnych narzÄdzi.
-
- JAK zaczÄ Ä nowe tÅumaczenie?
- JAK zamieniÄ tÅumaczenie z powrotem do pliku dokumentacji?
- JAK zaktualizowaÄ tÅumaczenie programem po4a?
- JAK skonwertowaÄ istniejÄ ce tÅumaczenia do po4a?
- JAK dodaÄ dodatkowy tekst do tÅumaczeÅ (np. nazwisko tÅumacza)?
- JAK to wszystko zrobiÄ, wywoÅujÄ c tylko jeden program?
-
- 3. Jak to dziaÅa?
- Ten rozdziaÅ zawiera krótki opis wewnÄtrznych mechanizmów po4a, tak że bÄdziesz miaÅ wiÄcej odwagi, aby pomóc nam w jego tworzeniu i udoskonalaniu. Może także Ci pomóc w zrozumieniu, dlaczego nie dziaÅa tak, jak byÅ tego oczekiwaÅ, oraz jak rozwiÄ zaÄ napotkane problemy.
- 4. FAQ
- Ten rozdziaÅ zawiera odpowiedzi na czÄsto zadawane pytania. Tak naprawdÄ, wiÄkszoÅÄ tych pytaÅ może byÄ sformuÅowanych jako ``Dlaczego po4a zostaÅo zaprojektowane tak, a nie inaczej?''. JeÅli wydaje Ci siÄ, że po4a nie jest wÅaÅciwym narzÄdziem do tÅumaczenia dokumentacji, powinieneÅ rozważyÄ przeczytanie tego rozdziaÅu. JeÅli nie znajdziesz w nim odpowiedzi na swoje pytanie, prosimy siÄ z nami skontaktowaÄ poprzez listÄ dyskusyjnÄ <po4a-devel@lists.alioth.debian.org>. Uwielbiamy znaÄ opinie użytkowników.
- 5. Specyficzne uwagi o moduÅach
- Ten rozdziaÅ opisuje rzeczy specyficzne dla każdego moduÅu, z punktu widzenia zarówno tÅumacza, jak i autora oryginalnego dokumentu. CzytajÄ
c ten rozdziaÅ, dowiesz siÄ, kiedy dany moduÅ wykonuje tÅumaczenia oraz jakich zasad powinieneÅ przestrzegaÄ, piszÄ
c oryginalny dokument, aby uproÅciÄ Å¼ycie tÅumaczom.
W zasadzie, ta sekcja nie jest czÄÅciÄ tego dokumentu. Zamiast tego jest umieszczana w dokumentacji każdego moduÅu. Pomaga to w zapewnieniu aktualnoÅci tych informacji, trzymajÄ c kod i dokumentacjÄ razem.
- 6. Znane bÅÄdy i Å¼Ä dania nowych funkcjonalnoÅci
- Już kilka :(
Dlaczego używaÄ po4a? Do czego jest on przydatny?
Podoba mi siÄ idea wolnego oprogramowania, pozwalajÄ cego każdemu na dostÄp do programów i ich kodów źródÅowych. BÄdÄ c jednak Francuzem, jestem Åwiadomy tego, że licencja programu nie jest jedynym ograniczeniem otwartoÅci oprogramowania: nieprzetÅumaczone oprogramowanie jest bezużyteczne dla ludzi nieznajÄ cych angielskiego, wiÄc ciÄ gle czeka na nas dużo pracy, żeby udostÄpniÄ je każdej takiej osobie.ÅwiadomoÅÄ tego problemu wÅród osób zwiÄ zanych z oprogramowaniem open-source ostatnio znacznie wzrosÅa. WygraliÅmy, jako tÅumacze, pierwszÄ bitwÄ i przekonaliÅmy wszystkich o znaczeniu tÅumaczeÅ. Niestety, to byÅa ta Åatwiejsza czÄÅÄ. Teraz musimy wykonaÄ naszÄ pracÄ i przetÅumaczyÄ wszystkie te rzeczy.
WÅaÅciwie oprogramowanie typu open-source ma doÅÄ przyzwoity poziom tÅumaczeÅ, dziÄki wspaniaÅemu pakietowi gettext, który ma możliwoÅci wyodrÄbniania z programu komunikatów do przetÅumaczenia, przekazywania tÅumaczom plików w jednolitym formacie i używania wyników ich pracy do pokazywania użytkownikowi przetÅumaczonych komunikatów w czasie dziaÅania programu.
W przypadku dokumentacji sytuacja jest trochÄ inna. Zbyt czÄsto siÄ zdarza, że tÅumaczony dokument nie jest dostatecznie widoczny (nie jest dystrybuowany jako czÄÅÄ programu), jest tylko czÄÅciowy lub nie jest aktualny. Ostatnia sytuacja jest najgorszÄ z możliwych. PrzestarzaÅe tÅumaczenie, opisujÄ ce stare, już nieistniejÄ ce zachowanie programu, może byÄ o wiele gorsze dla użytkownika niż brak tÅumaczenia w ogóle.
Problem do rozwiÄ zania
TÅumaczenie dokumentacji samo w sobie nie jest zbyt trudne. Teksty sÄ dużo dÅuższe niż komunikaty wyÅwietlane przez program, wiÄc ich tÅumaczenie zajmuje trochÄ wiÄcej czasu, nie wymaga przy tym jednak żadnych umiejÄtnoÅci technicznych. TrudniejszÄ czÄÅciÄ pracy jest zarzÄ dzanie tÅumaczeniem. Wykrywanie czÄÅci, które siÄ zmieniÅy i powinny byÄ zaktualizowane, jest bardzo trudne, podatne na bÅÄdy i wysoce nieprzyjemne. Najprawdopodobniej wyjaÅnia to, dlaczego tak wiele przetÅumaczonej dokumentacji nie jest aktualne.Odpowiedzi po4a
Tak wiÄc, celem po4a jest uczynienie tÅumaczeÅ dokumentacji Åatwymi do zarzÄ dzania. IdeÄ jest wykorzystanie metodologii gettexta na tym nowym polu. Tak jak w programie gettext, teksty sÄ wyodrÄbniane z ich oryginalnych miejsc, aby mogÅy w jednolitym formacie zostaÄ zaprezentowane tÅumaczowi. Klasyczne narzÄdzia gettexta pomogÄ im uaktualniÄ ich pracÄ, kiedy pojawi siÄ nowa wersja oryginalnego dokumentu. W przeciwieÅstwie zaÅ do klasycznego modelu gettext, tÅumaczenia sÄ wstawiane do struktury oryginalnego dokumentu, tak żeby mogÅy byÄ przetwarzane i dystrybuowane w dokÅadnie taki sam sposób, co wersja angielska.DziÄki temu staÅo siÄ Åatwiejsze znalezienie do przetÅumaczenia zmienionych czÄÅci dokumentu. Innym plusem jest to, że w wypadku zasadniczej reorganizacji struktury dokumentu, gdy rozdziaÅy sÄ przesuwane, ÅÄ czone lub dzielone, narzÄdzia wykonajÄ prawie caÅÄ brudnÄ robotÄ. WyodrÄbnianie ze struktury dokumentu tekstów do przetÅumaczenia pozwala tÅumaczom nie przejmowaÄ siÄ zÅożonoÅciÄ struktury dokumentu i zmniejsza szanse otrzymania dokumentu o niepoprawnej strukturze (choÄ zawsze jest to możliwe).
W sekcji FAQ poniżej opisano kompletnÄ listÄ plusów i minusów tego rozwiÄ zania.
ObsÅugiwane formaty
Obecnie rozwiÄ zanie to zaimplementowano z sukcesem dla kilku formatów tekstu:nroff
Format starych, dobrych stron podrÄcznika ekranowego, używanego przez wiele programów. ObsÅuga tego formatu w po4a jest mile widziana, ponieważ ten format jest raczej trudny w użyciu i niezbyt przyjazny dla nowych użytkowników. ModuÅ Locale::Po4a::Man(3pm) obsÅuguje również format mdoc,używany przez strony podrÄcznika systemu BSD (caÅkiem czÄsto wystÄpujÄ cych również pod Linuksem).
pod
Jest to format dokumentacji Perla. W ten sposób jest udokumentowany sam jÄzyk i jego rozszerzenia, a także wiÄkszoÅÄ istniejÄ cych skryptów Perla. ÅÄ czenie dokumentacji i kodu w jednym pliku, pomaga utrzymywaÄ aktualnoÅÄ dokumentacji. Upraszcza to życie programisty, ale niestety, nie tÅumacza.
sgml
Nawet jeÅli jest obecnie wypierany przez XML, ten format jest wciÄ Å¼ raczej czÄsto używany w dokumentach o dÅugoÅci wiÄkszej niż kilka ekranów. Pozwala tworzyÄ kompletne ksiÄ Å¼ki. Aktualizowane tÅumaczeÅ tak dÅugich dokumentów może byÄ prawdziwym koszmarem. Program diff bardzo czÄsto okazuje siÄ bezużyteczny, jeÅli zmieni siÄ struktura oryginalnego tekstu. Na szczÄÅcie, z pomocÄ może przyjÅÄ po4a.
Obecnie obsÅugiwane sÄ tylko DTD debiandoc i docbook, ale dodanie obsÅugi nowego typu jest bardzo proste. Jest nawet możliwe użycie po4a z nieznanym DTD SGML bez zmiany kodu - przez podanie wymaganych informacji w parametrach linii poleceÅ. SzczegóÅy można znaleÅºÄ w Locale::Po4a::Sgml(3pm).
TeX / LaTeX
Format LaTeX jest gÅównym formatem dokumentacji używanym w publikacjach pisanych przez ludzi zwiÄ zanych ze Åwiatem wolnego oprogramowania. ModuÅ Locale::Po4a::LaTeX(3pm) byÅ testowany na dokumentacji Pythona, ksiÄ Å¼ce i kilku prezentacjach.
texinfo
CaÅa dokumentacja GNU jest pisana w tym formacie (i jest to nawet jedno z wymagaÅ stawianych projektom , które chcÄ staÄ siÄ oficjalnymi projektami GNU). Wsparcie dla Locale::Po4a::Texinfo(3pm) jest wciÄ Å¼ w fazie poczÄ tkowej. Prosimy o zgÅaszanie bÅÄdów i przesyÅanie uwag dotyczÄ cych brakujÄ cych funkcjonalnoÅci.
xml
XML jest formatem bazowym wielu innych formatów dokumentacji.
Obecnie po4a obsÅuguje docbook DTD. SzczegóÅy można znaleÅºÄ w Locale::Po4a::Docbook(3pm).
inne
Po4a może także obsÅugiwaÄ kilka rzadszych lub bardziej specjalizowanych formatów, takich jak dokumentacja opcji kompilacji jÄ der 2.4 lub diagramów wyprodukowanych przez narzÄdzie dia. Dodanie nowego formatu jest czÄsto bardzo proste, a gÅównym zadaniem jest napisanie parsera tego formatu. WiÄcej informacji o tym można znaleÅºÄ w Locale::Po4a::TransTractor(3pm).
Formaty niewspierane
Niestety, po4a ciÄ gle nie obsÅuguje kilku formatów dokumentacji.Istnieje caÅa masa innych formatów, które byÅmy chcieli obsÅugiwaÄ w po4a, i nie sÄ to tylko formaty dokumentacji. W zasadzie, naszym celem jest wypeÅnienie wszystkich dziur pozostawionych przez klasyczne narzÄdzia gettext. Obejmuje to opisy pakietów (deb i rpm), pytania skryptów instalacyjnych pakietów, logi zmian pakietów i wszystkie specjalizowane formaty używane przez programy, jak na przykÅad scenariusze gier lub pliki zasobów wine.
Jak używaÄ po4a?
RozdziaÅ ten jest rodzajem podrÄcznika i próbuje odpowiedzieÄ na pytania użytkowników, pozwalajÄ c lepiej zrozumieÄ caÅy proces. Odpowiada, jak wykonaÄ różne rzeczy w po4a, i sÅuży jako wprowadzenie do dokumentacji konkretnych narzÄdzi.Graficzne podsumowanie
NastÄpujÄ cy schemat pokazuje poglÄ dowo proces tÅumaczenia dokumentacji z użyciem po4a. Nie powinno siÄ przejmowaÄ jego pozornÄ zÅożonoÅciÄ , która wziÄÅa siÄ stÄ d, że pokazaliÅmy tutaj caÅy proces. Po skonwertowaniu projektu do po4a, istotna bÄdzie tylko prawa czÄÅÄ schematu. ProszÄ zauważyÄ, że sgml wystÄpuje tu jako przykÅad i caÅy schemat jest dokÅadnie taki sam dla wszystkich moduÅów. KażdÄ czÄÅÄ rysunku omówimy szczegóÅowo w nastÄpnych sekcjach.fr.sgml oryginalny.sgml ---->------+------>----------->-------+ | | | | V V { aktualizacja oryginaÅu } | | | | | +--<---<--+ V | | | oryginalny.nowy.sgml ---->---->----+ V V | | [po4a-gettextize] +--->---->---+ | | | | V | | | | [po4a-updatepo] | | V ^ | V V oryginalny.pot | V | | | | fr.po | | | | (niepewny - fuzzy) | | { tÅumaczenie } | | | | | ^ V V | | | {rÄczna edycja} | V V | | | | | | V V | | +--<--- fr.po zaÅÄ cznik oryginalny.sgml +---->----+---->------->---> (aktualny) (opcjonalny) (aktualny) | | | v v v +------>-----+------<------+ | v [po4a-translate] | V fr.sgml (aktualny)
Lewa czÄÅÄ pokazuje konwersjÄ tÅumaczenia nie używajÄ cego jeszcze po4a do tego systemu. Góra prawej czÄÅci pokazuje akcje autora oryginaÅu (aktualizowanie dokumentacji). Årodek prawej czÄÅci obrazuje automatyczne akcje po4a. Nowy materiaÅ jest wyodrÄbniany i porównywany z istniejÄ cymi tÅumaczeniami. Znajdowane sÄ czÄÅci, które siÄ nie zmieniÅy, i dla nich używane jest poprzednie tÅumaczenie. CzÄÅci zmodyfikowane tylko w nieznacznym stopniu sÄ także ÅÄ czone z poprzednimi tÅumaczeniami, ale dodawany jest specjalny znacznik, mówiÄ cy, że tÅumaczenie musi byÄ uaktualnione. DóŠrysunku pokazuje sposób, w jaki jest budowany sformatowany dokument.
WÅaÅciwie, jedynÄ rÄcznÄ operacjÄ , którÄ musi wykonaÄ tÅumacz jest czÄÅÄ oznaczona {rÄczna edycja}. Przykro nam, po4a tylko pomaga tÅumaczyÄ, ale niestety niczego za Ciebie nie przetÅumaczy...
JAK zaczÄ Ä nowe tÅumaczenie?
Ta sekcja opisuje kroki niezbÄdne do rozpoczÄcia nowego tÅumaczenia z użyciem po4a. Konwertowanie istniejÄ cego projektu do tego systemu opisano w szczegóÅach w odpowiedniej sekcji.Aby zaczÄ Ä nowe tÅumaczenie, używajÄ c po4a, należy wykonaÄ nastÄpujÄ ce kroki:
- -
- WyciÄ
gnÄ
Ä tekst do przetÅumaczenia z oryginalnego dokumentu do nowego pliku pot (format programu gettext). Aby to zrobiÄ, należy wywoÅaÄ program po4a-gettextize w nastÄpujÄ
cy sposób:
$ po4a-gettextize -f <format> -m <master.doc> -p <tÅumaczenie.pot>
<format> jest oczywiÅcie formatem używanym w dokumencie <master.doc>. Jak można oczekiwaÄ, plikiem wyjÅciowym jest <tÅumaczenie.pot>. WiÄcej szczegóÅów o dostÄpnych opcjach można znaleÅºÄ w po4a-gettextize(1).
- -
- PrzetÅumaczyÄ to, co jest do przetÅumaczenia. W tym celu należy zmieniÄ nazwÄ pliku pot na przykÅad na doc.XX.po (gdzie XX jest kodem ISO639 jÄzyka, na który siÄ tÅumaczy, np. ``fr'' dla jÄzyka francuskiego) i edytowaÄ powstaÅy plik. Zazwyczaj dobrym pomysÅem jest nienazywanie tego pliku XX.po, aby uniknÄ
Ä pomylenia z tÅumaczeniem komunikatów programu, ale wybór należy do Ciebie. ProszÄ nie zapominaÄ o uaktualnieniu nagÅówków pliku po; sÄ
one bardzo ważne.
Do tÅumaczenia można wykorzystaÄ tryb po Emacsa, program kbabel (oparty na KDE) lub gtranslator (oparty na GNOME) lub jakikolwiek inny program, w zależnoÅci od upodobaÅ tÅumacza. Można nawet użyÄ dobrego starego edytora vi, mimo że nie ma on specjalnego trybu uÅatwiajÄ cego tÅumaczenia.
Aby dowiedzieÄ siÄ czegoÅ wiÄcej, stanowczo powinno siÄ przeczytaÄ dokumentacjÄ programu gettext, dostÄpnÄ w pakiecie gettext-doc.
JAK zamieniÄ tÅumaczenie z powrotem do pliku dokumentacji?
Po zakoÅczeniu tÅumaczenia zapewne należaÅoby wygenerowaÄ przetÅumaczone dokumenty i rozdystrybuowaÄ je wÅród użytkowników, razem z oryginalnymi dokumentami. Aby to zrobiÄ, należy użyÄ programu po4a-translate(1) w ten sposób (XX jest kodem jÄzyka):$ po4a-translate -f <format> -m <master.doc> -p <doc.XX.po> -l <XX.doc>
Jak wczeÅniej, <format> jest formatem dokumentu <master.doc>. Jednak tym razem plik po, przekazany w opcji -p, jest czÄÅciÄ wejÅcia - jest to Twoje tÅumaczenie. WyjÅcie jest zapisywane w <XX.doc>.
WiÄcej szczegóÅów można znaleÅºÄ w <po4a-translate(1)>.
JAK zaktualizowaÄ tÅumaczenie programem po4a?
Aby zaktualizowaÄ tÅumaczenie, gdy zmieni siÄ oryginalny plik, należy użyÄ po4a-updatepo(1) w nastÄpujÄ cy sposób:$ po4a-updatepo -f <format> -m <nowy_oryginalny.doc> -p <istniejÄ cy.XX.po>
(WiÄcej szczegóÅów można znaleÅºÄ w <po4a-updatepo(1)>).
OczywiÅcie ta operacja nie spowoduje automagicznego przetÅumaczenia nowych akapitów oryginalnego dokumentu. Należy rÄcznie uaktualniÄ plik "po". Podobnie należy zaktualizowaÄ tÅumaczenie akapitów, które siÄ choÄ trochÄ zmieniÅy. Aby mieÄ pewnoÅÄ, że żadnego z nich nie ominiesz, zostaÅy one zaznaczone jako ``fuzzy'' (niepewne) i zanim po4a-translate bÄdzie mógÅ ich użyÄ, to zaznaczenie musi zostaÄ usuniÄte. Tak jak w przypadku pierwszego tÅumaczenia najlepiej jest użyÄ ulubionego edytora.
Kiedy plik "po" bÄdzie znowu aktualny, bez żadnych wpisów nieprzetÅumaczonych lub niepewnych (``fuzzy''), można wygenerowaÄ przetÅumaczony plik dokumentacji, tak jak to opisano w poprzedniej sekcji.
JAK skonwertowaÄ istniejÄ ce tÅumaczenia do po4a?
CzÄsto siÄ zdarzaÅo, że tÅumaczyÅeÅ dokument rÄcznie dopóty, dopóki nie nastÄ piÅa wiÄksza reorganizacja oryginalnego dokumentu. W tej sytuacji, po kilku nieprzyjemnych próbach z diffem lub podobnymi narzÄdziami, możesz zechcieÄ skonwertowaÄ dokument do po4a. OczywiÅcie należy go skonwertowaÄ tak, aby nie utraciÄ istniejÄ cych tÅumaczeÅ. Nie należy siÄ obawiaÄ, ten przypadek także jest obsÅugiwany przez po4a i jest nazywany procesem przechodzenia do formatu gettext.KluczowÄ kwestiÄ jest to, aby struktura tÅumaczonego dokumentu byÅa taka sama jak oryginaÅu, tak żeby narzÄdzia mogÅy odpowiednio dopasowaÄ zawartoÅÄ.
JeÅli masz szczÄÅcie (tj. struktura obu dokumentów dokÅadnie do siebie pasuje), wszystko zadziaÅa bez żadnego problemu i bÄdzie gotowe w ciÄ gu paru sekund. W przeciwnym razie możesz zrozumieÄ dlaczego ten proces ma takÄ brzydkÄ nazwÄ i przygotuj siÄ na doÅÄ nieprzyjemnÄ pracÄ. W każdym razie, pamiÄtaj, że jest to cena za komfort, który później dostarczy po4a. Dobre w tym wszystkim jest to, że trzeba to zrobiÄ tylko raz.
Nie bÄdÄ siÄ dÅugo nad tym rozwodziÅ. Aby uÅatwiÄ proces, ważne jest znalezienie dokÅadnie tej wersji oryginaÅu, która byÅa przetÅumaczona. Najlepiej, jeÅli zanotowaÅeÅ sobie wersjÄ z CVS-u dokumentu użytego do tÅumaczenia i jej nie modyfikowaÅeÅ w procesie tÅumaczenia, tak że możesz jej teraz użyÄ.
Nie zadziaÅa to dobrze, jeÅli użyje siÄ uaktualnionego tekstu oryginaÅu ze starym tÅumaczeniem. Pozostaje to możliwe, ale jest to trudniejsze i naprawdÄ powinno siÄ tego unikaÄ, gdy tylko jest to możliwe. Jeżeli nie udaÅo Ci siÄ znaleÅºÄ ponownie starego oryginaÅu, to najlepszym rozwiÄ zaniem jest znalezienie kogoÅ, kto przeprowadzi za Ciebie proces przechodzenia na format gettext (ale, proszÄ, niech nie bÄdÄ to ja ;).
ByÄ może zbytnio w tym momencie dramatyzujÄ. Jednak nawet, gdy proces siÄ nie udaje, pozostaje mimo wszystko szybszÄ drogÄ niż tÅumaczenie wszystkiego od nowa. UdaÅo mi siÄ przepuÅciÄ przez ten proces francuskie tÅumaczenie dokumentacji Perla w ciÄ gu jednego dnia, nawet wtedy, gdy wszystko szÅo źle. ByÅo to ponad dwa megabajty tekstu, którego tÅumaczenie od nowa trwaÅoby miesiÄ cami lub dÅużej.
ProszÄ najpierw pozwoliÄ mi wyjaÅniÄ podstawy tej procedury, a potem powrócÄ do wskazówek, co zrobiÄ, gdy proces siÄ nie udaje. Dla lepszego zrozumienia, weźmy jako przykÅad ponownie moduÅ sgml, jednak tak naprawdÄ użyty format nie ma żadnego znaczenia.
Kiedy już zdobÄdziesz stary oryginaÅ dokumentu, proces przechodzenia na gettext może byÄ tak Åatwy, jak:
$ po4a-gettextize -f <format> -m <stary.oryginaÅ> -l <stare.tÅumaczenie> -p <doc.XX.po>
JeÅli masz szczÄÅcie, to to wszystko. Stare tÅumaczenia zostaÅy skonwertowane do po4a i można od razu zaczÄ Ä ich aktualizowanie. Należy tylko trzymajÄ c siÄ procedury opisanej kilka sekcji wczeÅniej, zsynchronizowaÄ plik po z najnowszym oryginalnym dokumentem i odpowiednio zaktualizowaÄ tÅumaczenia.
ProszÄ zauważyÄ, że nawet jeÅli wydaje siÄ, że wszystko zadziaÅaÅo poprawnie, może siÄ okazaÄ, że jednak wystÄ piÅy bÅÄdy podczas tego procesu. Po4a nie rozumie przetwarzanych tekstów, wiÄc nie może byÄ byÄ pewne, że tÅumaczenia sÄ poprawnie przypisane do oryginaÅów. Dlatego wszystkie komunikaty sÄ oznaczone jako ``fuzzy'' (niepewne). Przed usuniÄciem tych znaczników, proszÄ uważnie sprawdziÄ każde tÅumaczenie.
Bardzo czÄsto struktury dokumentów nie pasujÄ dokÅadnie do siebie, przez co po4a-gettextize nie może poprawnie wykonaÄ swojego zadania. W tym punkcie gra toczy siÄ o to, aby tak pozmieniaÄ pliki, aby ich cholerne struktury sobie odpowiadaÅy.
Pomocne może byÄ przeczytanie poniżej sekcji ``Proces przeksztaÅcania do formatu gettext: jak to dziaÅa?''. Zrozumienie wewnÄtrznych procesów pomoże wykonaÄ zadanie. Plusem jest to, że w razie niepowodzenia, po4a-gettextize gÅoÅno powie, co poszÅo źle, umożliwiajÄ c poznanie komunikatów, które do siebie nie pasowaÅy, ich pozycjÄ w tekÅcie i typ każdego z nich. Co wiÄcej, plik po wygenerowany do tej pory, bÄdzie zachowany jako gettextization.failed.po.
- -
- Należy usunÄ Ä wszystkie dodatkowe czÄÅci tÅumaczenia, takie jak sekcja, w której podano nazwisko tÅumacza i podziÄkowania dla wszystkich ludzi, którzy pomagali przy tÅumaczeniu. Później takie czÄÅci bÄdzie można z powrotem dodaÄ, używajÄ c zaÅÄ czników, opisanych w nastÄpnym rozdziale.
- -
- Nie wahaj siÄ edytowaÄ zarówno pliku oryginalnego, jak i jego tÅumaczenia. NajważniejszÄ rzeczÄ jest otrzymanie pliku po. Potem bÄdzie można go zaktualizowaÄ. Edytowanie tÅumaczeÅ powinno byÄ jednak preferowane, ponieważ uproÅci to pewne rzeczy po zakoÅczeniu siÄ procesu przeksztaÅcania na format gettext.
- -
- JeÅli jest taka potrzeba, należy usunÄ Ä kilka czÄÅci oryginalnego dokumentu, które nie sÄ przetÅumaczone. Później podczas synchronizowania po z dokumentem czÄÅci te siÄ pojawiÄ same.
- -
- JeÅli w niewielkim stopniu zmieniÅeÅ strukturÄ dokumentu (poÅÄ czenie dwóch akapitów, albo podzielenie innego akapitu), wycofaj te zmiany. JeÅli te zmiany miaÅy zwiÄ zek z problemami wystÄpujÄ cym w oryginalnym dokumencie, powinieneÅ poinformowaÄ o nich jego autora. KorzyÅci z poprawienie ich tylko w Twoim tÅumaczeniu bÄdzie miaÅa tyko czÄÅÄ spoÅecznoÅci. Co wiÄcej, takie poprawki nie sÄ możliwe, gdy siÄ używa po4a.
- -
- Czasami zawartoÅci akapitów siÄ zgadzajÄ
, ale ich typy nie. Poprawienie tego zależy od formatu. W formatach pod i nroff, czÄsto bierze siÄ to z tego, że jeden z tych dwóch akapitów zawiera liniÄ zaczynajÄ
cÄ
siÄ od biaÅego znaku, a drugi - nie. W tych formatach tekst takich akapitów nie może byÄ zawijany i dlatego wystÄpuje niezgodnoÅÄ typów. RozwiÄ
zaniem jest usuniÄcie spacji. Może to byÄ także literówka w nazwie elementu.
Podobnie, dwa akapity mogÄ zostaÄ scalone razem w formacie pod, jeżeli rozdzielajÄ ca linia zawiera spacje lub kiedy brakuje pustej linii przed liniÄ ==item i zawartoÅciÄ tego elementu.
- -
- Czasami wystÄpuje rozsynchronizowanie miÄdzy plikami i tÅumaczenie jest przypisane do zÅego akapitu oryginaÅu. Jest to oznaka, że w rzeczywistoÅci problem leży w plikach. ProszÄ znaleÅºÄ w gettextization.failed.po miejsce, gdzie zaczyna siÄ rozsynchronizowanie, a nastÄpnie poprawiÄ w tym miejscu pliki wejÅciowe.
- -
- Czasami może siÄ wydawaÄ, że po4a zjadÅo jakÄ
Å czÄÅÄ tekstu albo z oryginaÅu, albo z tÅumaczenia. gettextization.failed.po wskazuje, że oba pliki dokÅadnie do siebie pasowaÅy, a przetwarzanie koÅczy siÄ bÅÄdem ponieważ nastÄ
piÅa próba dopasowania jakiegoÅ akapitu do akapitu po (lub przed) tym wÅaÅciwym, tak jakby ten wÅaÅciwy siÄ ulotniÅ. Można tylko klÄ
Ä na po4a, tak jak ja klÄ
Åem, gdy mi siÄ to zdarzyÅo po raz pierwszy. Serio.
Ta nieszczÄÅliwa sytuacja zdarza siÄ, kiedy ten sam akapit jest powtórzony w dokumencie. W tym przypadku nie jest tworzony nowy wpis w pliku po, ale dodawane jest tylko nowe odwoÅanie do już istniejÄ cego wpisu.
Tak wiÄc, kiedy ten sam akapit pojawia siÄ dwa razy w oryginalnym dokumencie, ale nie jest przetÅumaczony w dokÅadnie ten sam sposób, można mieÄ wrażenie, że ten akapit oryginaÅu zniknÄ Å. Wystarczy usunÄ Ä nowe tÅumaczenie. JeÅli preferowaÅbyÅ usuniÄcie pierwszego z tych tÅumaczeÅ, bo drugie jest lepsze, po prostu przenieÅ drugie tÅumaczenie w miejsce pierwszego.
Odwrotnie, jeÅli dwa podobne, ale jednak różne, akapity byÅy przetÅumaczone dokÅadnie tak samo, to jeden akapit tÅumaczenia zniknie. RozwiÄ zaniem jest dodanie gÅupiego tekstu do oryginalnego akapitu (takiego jak ``różniÄ siÄ''). Nie trzeba siÄ tego baÄ, takie rzeczy zniknÄ podczas synchronizacji, a kiedy taki tekst jest wystarczajÄ co krótki, gettext dopasuje Twoje tÅumaczenie do istniejÄ cego tekstu (oznaczajÄ c je jako niepewne [``fuzzy''], czym nie powinno siÄ przejmowaÄ, gdyż wszystkie komunikaty sÄ tak oznaczone zaraz po procesie przeksztaÅcania na format gettext).
Mamy nadziejÄ, że te porady pomogÄ w procesie przeksztaÅcania do formatu gettext i w otrzymaniu pliku po. Można teraz ten plik zsynchronizowaÄ i zaczÄ Ä go tÅumaczyÄ. ProszÄ zauważyÄ, że w wypadku dÅugich plików, pierwsza synchronizacja może zajÄ Ä dużo czasu.
Na przykÅad, pierwsze wykonanie po4a-updatepo na francuskim tÅumaczeniu dokumentacji Perla (plik po o rozmiarze 5.5 Mb) zajÄÅo okoÅo dwóch dni na komputerze 1Ghz G5. Tak, 48 godzin. Ale kolejne zajmujÄ tylko kilkanaÅcie sekund na moim starym laptopie. Dzieje siÄ tak, ponieważ na samym poczÄ tku wiÄkszoÅÄ msgid pliku po nie pasuje do żadnego msgid w pliku pot. Wymusza to na programie gettext wyszukiwanie najbardziej zbliżonego msgid, używajÄ c kosztownego algorytmu bliskoÅci ÅaÅcuchów znaków.
JAK dodaÄ dodatkowy tekst do tÅumaczeÅ (np. nazwisko tÅumacza)?
Z powodu rozwiÄ zaÅ stosowanych przez gettext, zrobienie tego może byÄ trudniejsze w po4a niż byÅo wczeÅniej, kiedy to plik byÅ po prostu rÄcznie edytowany. Jednak pozostaje to możliwe, dziÄki tak zwanym zaÅÄ cznikom.Dla lepszego zrozumienia można przyjÄ Ä, że zaÅÄ czniki sÄ rodzajem Åat (patch) aplikowanych do przetÅumaczonego dokumentu po zakoÅczeniu przetwarzania. RóżniÄ siÄ one od zwykÅych Åat (majÄ tylko jednÄ liniÄ kontekstu, która może zawieraÄ wyrażenie regularne Perla, i mogÄ tylko dodawaÄ nowy tekst bez usuwania czegokolwiek), ale funkcjonalnoÅÄ jest taka sama.
Celem jest danie tÅumaczowi możliwoÅci doÅÄ czenie do dokumentu dodatkowej zawartoÅci, która nie jest tÅumaczeniem oryginalnego dokumentu. NajczÄÅciej używany jest do dodawania sekcji dotyczÄ cej samego tÅumaczenia, wypisania wspóÅpracowników lub podania sposobu zgÅaszania bÅÄdów znalezionych w tÅumaczeniu.
ZaÅÄ cznik musi byÄ podany jako osobny plik, którego pierwsza linia zawiera nagÅówek okreÅlajÄ cy, gdzie należy umieÅciÄ tekst zaÅÄ cznika. Reszta pliku zaÅÄ cznika bÄdzie umieszczona bez zmian w okreÅlonej pozycji wynikowego dokumentu.
SkÅadnia nagÅówka jest caÅkiem sztywna: musi zaczynaÄ siÄ od tekstu ``PO4A-HEADER:'' poprzedzajÄ cego rozdzielonÄ Årednikami (;) listÄ pól ``klucz=wartoÅÄ''. Spacje SÄ istotne. ProszÄ zauważyÄ, że nie można użyÄ Åredników (;) w wartoÅci, a ich cytowanie za pomocÄ odwrotnego ukoÅnika nie pomaga.
Tak, brzmi to strasznie, ale poniższe przykÅady powinny pomóc w napisaniu odpowiedniej linii nagÅówka. Aby zilustrowaÄ dyskusjÄ, zaÅóżmy, że chcemy dodaÄ sekcjÄ ``O tÅumaczeniu'' zaraz po sekcji ``O dokumencie''.
Kilka możliwych kluczy nagÅówka:
- position (obowiÄ zkowe)
- wyrażenie regularne. ZaÅÄ
cznik bÄdzie umieszczony w pobliżu linii pasujÄ
cej do wyrażenia regularnego. ProszÄ zauważyÄ, że mówimy tutaj o dokumencie przetÅumaczonym, a nie o oryginale. JeÅli wiÄcej niż jedna linia pasuje do tego wyrażenia, dodawanie zaÅÄ
cznika siÄ nie powiedzie. Istotnie, lepiej jest zgÅosiÄ bÅÄ
d niż wstawiÄ zaÅÄ
cznik w nieodpowiednie miejsc.
TÄ liniÄ bÄdziemy dalej nazywaÄ punktem pozycji. Punkt, w którym zaÅÄ cznik jest dodawany nazwiemy punktem wstawienia. Te dwa punkty sÄ blisko siebie, ale nie sÄ sobie równe. Na przykÅad, aby dodaÄ nowÄ sekcjÄ Åatwiej zaczepiÄ punkt pozycji na tytule poprzedniej sekcji i wytÅumaczyÄ programowi po4a, gdzie ta sekcja siÄ koÅczy (należy pamiÄtaÄ, że punkt pozycji jest podany przez wyrażenie regularne, które powinno dopasowywaÄ siÄ do pojedynczej linii).
ZależnoÅÄ miejsca punktu wstawienia w stosunku do punkty pozycji jest okreÅlana przez pola "mode", "beginboundary" i "endboundary", opisane poniżej.
W naszym przypadku byÅoby to:
position=<title>O dokumencie</title>
- mode (obowiÄ zkowe)
- Może byÄ to jeden z nastÄpujÄ
cych ÅaÅcuchów znaków: ``before'' (= przed) lub ``after'' (= po), okreÅlajÄ
cych pozycjÄ dodatku w stosunku do punktu pozycji.
Ponieważ chcemy nowÄ sekcjÄ umieÅciÄ pod tÄ , którÄ wyszukaliÅmy, mamy:
mode=after
- beginboundary (używany, gdy mode=after i obowiÄ zkowy w tym wypadku)
- endboundary (jak wyżej)
- wyrażenie regularne pasujÄ
ce do koÅca sekcji, po której jest dodawany zaÅÄ
cznik.
W trybie ``after'' punkt wstawienia jest za punktem pozycji, ale nie bezpoÅrednio za! Jest on umieszczony na koÅcu sekcji zaczynajÄ cej siÄ w punkcie pozycji, czyli za albo przed liniÄ pasujÄ cÄ do argumentu "???boundary" w zależnoÅci od tego, czy byÅo użyte "beginboundary", czy "endboundary".
W rozpatrywanym przypadku możemy wybraÄ wskazanie koÅca dopasowywanej sekcji, dodajÄ c:
endboundary=</section>
albo możemy wskazaÄ poczÄ tek kolejnej sekcji w nastÄpujÄ cy sposób:
beginboundary=<section>
W obu wypadkach zaÅÄ cznik bÄdzie umieszczony po </section>, a przed <section>. Ten pierwszy sposób dziaÅa lepiej, ponieważ zadziaÅa nawet wtedy, gdy dokument zostanie zreorganizowany.
Obie formy istniejÄ ponieważ formaty dokumentacji sÄ różne. Niektóre z nich zawierajÄ znacznik koÅca sekcji (tak jak "</section>", której wÅaÅnie użyliÅmy), a inne (np. nroff) tego koÅca nie oznaczajÄ w żaden szczególny sposób. W pierwszym przypadku boundary powinno odpowiadaÄ koÅcowi sekcji, tak że punkt wstawienia nastÄpuje po niej. W drugim przypadku boundary powinno pasowaÄ do poczÄ tku nastÄpnej sekcji, a punkt wstawienia powinien byÄ umieszczony zaraz przed niÄ .
Może siÄ to wydawaÄ niejasne, nastÄpne przykÅady powinny co nieco wyklarowaÄ.
- PodsumowujÄ c przykÅady podane do tej pory: aby dodaÄ sekcjÄ O tÅumaczeniu po sekcji O dokumencie w dokumencie sgml, należy użyÄ jednej z poniższych linii nagÅówka:
-
PO4A-HEADER: mode=after; position=O dokumencie; endboundary=</section> PO4A-HEADER: mode=after; position=O dokumencie; beginboundary=<section>
- Aby dodaÄ coÅ po nastÄpujÄ cej sekcji nroff:
-
.SH "AUTORZY"
powinno siÄ ustawiÄ "positon" pasujÄ ce do tej linii oraz "beginboundary" pasujÄ ce do poczÄ tku nastÄpnej sekcji (tj. "^\.SH"). ZaÅÄ cznik zostanie dodany po punkcie pozycji i zaraz przed pierwszÄ liniÄ pasujÄ cÄ do "beginboundary". Czyli:
PO4A-HEADER:mode=after;position=AUTORZY;beginboundary=\.SH
- Aby zamiast dodawaÄ caÅÄ sekcjÄ, dodaÄ coÅ do jakiejÅ sekcji (np. po Copyright Big Dude), trzeba podaÄ position pasujÄ ce do tej linii i beginboundary pasujÄ ce do jakiejkolwiek linii.
-
PO4A-HEADER:mode=after;position=Copyright Big Dude, 2004;beginboundary=^
- Aby dodaÄ coÅ na koÅcu dokumentu, należy podaÄ position pasujÄ ce do jakiejkolwiek linii pliku (ale tylko jednej linii. Po4a nie przetworzy tego, jeÅli linia nie bÄdzie unikatowa) i podaÄ endboundary nie pasujÄ ce do niczego. Nie należy używaÄ tutaj prostych tekstów jak EOF, tylko takich, które majÄ maÅe szanse pojawienia siÄ w dokumencie.
-
PO4A-HEADER:mode=after;position=<title>O dokumencie</title>;beginboundary=NieistniejÄ aLiniaPo4a
W każdym wypadku należy pamiÄtaÄ, że sÄ to wyrażenia regularne. Na przykÅad, aby dopasowaÄ koniec sekcji nroff, koÅczÄ cej siÄ liniÄ
.fi
nie należy używaÄ ".fi" jako endboundary, ponieważ bÄdzie on pasowaÅ do ``the[ fi]le'' co raczej nie jest tym, czego można by oczekiwaÄ. Poprawnym endboundary w tym przypadku jest "^\.fi$".
JeÅli zaÅÄ cznik nie trafiÅ tam, gdzie powinien, spróbuj przekazaÄ narzÄdziom po4a argument -vv, który powinien pomóc wyjaÅniÄ co siÄ dzieje podczas dodawania zaÅÄ cznika.
Bardziej szczegóÅowy przykÅad
Oryginalny dokument (w formacie pod):
|=head1 NAZWA | |dummy - fikcyjny program | |=head1 AUTOR | |ja
Wtedy nastÄpujÄ cy dodatek spowoduje dodanie sekcji (w jÄzyku francuskim) na koniec tego pliku (w jÄz. francuskim ``TRADUCTEUR'' oznacza ``TÅUMACZ'', a ``moi'' znaczy ``ja'')
|PO4A-HEADER:mode=after;position=AUTEUR;beginboundary=^=head | |=head1 TRADUCTEUR | |moi
Aby umieÅciÄ dodatek przed sekcjÄ AUTOR, należy użyÄ nastÄpujÄ cego nagÅówka:
PO4A-HEADER:mode=after;position=NOM;beginboundary=^=head1
To dziaÅa, ponieważ nastÄpnÄ liniÄ pasujÄ cÄ do beginboundary /^=head1/ po sekcji ``NAZWA'' (przetÅumaczonej na francuskie ``NOM'') jest linia opisujÄ ca autorów. Tak wiÄc zaÅÄ cznik zostanie umieszczony pomiÄdzy obiema sekcjami.
JAK to wszystko zrobiÄ, wywoÅujÄ c tylko jeden program?
Użytkownicy udowodnili, że takie użycie po4a jest narażone na bÅÄdy, ponieważ należy we wÅaÅciwym porzÄ dku wywoÅaÄ dwa różne programy (po4a-updatepo, a nastÄpnie po4a-translate), z których każdy wymaga podania wiÄcej niż 3 argumentów. Co wiÄcej, w tym systemie byÅo trudno użyÄ tylko jednego pliku po dla wszystkich dokumentów, kiedy użyto wiÄcej niż jednego formatu.Program po4a(1) zaprojektowano, aby rozwiÄ zaÄ te trudnoÅci. Kiedy tylko projekt zostanie skonwertowany do tego systemu, można napisaÄ prosty plik konfiguracyjny opisujÄ cy miejsce poÅożenia plików tÅumaczeÅ (po i pot) i oryginalnych dokumentów, ich formaty oraz miejsce, gdzie powinny trafiaÄ przetÅumaczone dokumenty.
Uruchomienie po4a(1) na tym pliku spowoduje zsynchronizowanie wszystkich plików po z oryginalnym dokumentem, tak żeby przetÅumaczony dokument zostaÅ poprawnie wygenerowany. OczywiÅcie należy ten program wywoÅaÄ dwa razy: raz przed edytowaniem pliku po, żeby go zaktualizowaÄ, i raz po jego edycji, aby otrzymaÄ caÅkowicie aktualny przetÅumaczony dokument . Tylko że potrzebujesz zapamiÄtaÄ tylko jednÄ komendÄ linii poleceÅ.
Jak to dziaÅa?
Ten rozdziaÅ zawiera krótki opis wewnÄtrznych mechanizmów po4a, tak że bÄdziesz miaÅ wiÄcej odwagi, aby pomóc nam w jego tworzeniu i udoskonalaniu. Może także Ci pomóc w zrozumieniu, dlaczego nie dziaÅa tak, jak byÅ tego oczekiwaÅ, oraz jak rozwiÄ zaÄ napotkane problemy.Jaki jest tu duży obrazek?
Architektura po4a jest zorientowana obiektowo (w Perlu, czy to nie eleganckie?). Wspólny przodek wszystkich klas parserów zwie siÄ TransTractor. Ta dziwna nazwa wziÄÅa siÄ stÄ d, że jest on odpowiedzialny za tÅumaczenie dokumentu i wydobywanie komunikatów.Bardziej formalnie mówiÄ c, pobiera dokument do przetÅumaczenia oraz plik po zawierajÄ cy tÅumaczenia używany jako wejÅcie podczas tworzenia dwóch oddzielnych plików wyjÅciowych: innego pliku po (wyniku wyodrÄbniania komunikatów z dokumentu wejÅciowego) oraz przetÅumaczonego dokumentu (majÄ cego takÄ samÄ strukturÄ jak plik wejÅciowy, ale ze wszystkimi komunikatami zamienionymi na zawartoÅÄ wejÅciowego pliku po). Poniżej jest graficzne przedstawienie tego procesu:
Dokument wejÅciowy -\ /-> Dokument wyjÅciowy \ TransTractor:: / (przetÅumaczony) +-->-- parse() --- -+ / \ WejÅciowy po -------/ \---> WyjÅciowy po (wyodrÄbniony)
Ta maÅa koÅÄ jest podstawÄ caÅej architektury po4a. JeÅli pominiesz wejÅciowy plik po i dokument wyjÅciowy, otrzymasz po4a-gettextize. JeÅli podasz oba pliki wejÅciowe i zlekceważysz wyjÅciowy plik po, otrzymasz po4a-translate.
TransTractor::parse() jest wirtualnÄ funkcjÄ zaimplementowanÄ w każdym module. Tutaj podano prosty przykÅad, żeby zobrazowaÄ jej dziaÅanie. Przetwarza listÄ akapitów, z których każdy zaczyna siÄ 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 wejÅciowego. 19 } 20 }
W linii 6. po raz drugi napotkaliÅmy <p>. Oznacza to kolejny akapit. PowinniÅmy dlatego zwróciÄ otrzymanÄ liniÄ do oryginalnego dokumentu (linia 7.), a na wyjÅcie doÅożyÄ akapit zbudowany do tej pory. Po usuniÄciu z niego poczÄ tkowego <p> w linii 9., dokÅadamy ten element poÅÄ czony z tÅumaczeniem reszty akapitu.
Funkcja translate() jest bardzo fajna (cool ;)). Dodaje swoje argumenty na koniec wynikowego pliku po (ekstrakcja) i zwraca ich tÅumaczenie, znalezione w wejÅciowym pliku po (tÅumaczenie). Ponieważ jest używana jako czÄÅÄ argumentu pushline(), tÅumaczenie lÄ duje w wynikowym dokumencie.
Czy to nie jest fajne? Jest możliwe zbudowanie kompletnego moduÅu po4a w mniej niż 20 liniach, jeżeli tylko format jest wystarczajÄ co prosty...
WiÄcej informacji o tym można znaleÅºÄ w Locale::Po4a::TransTractor(3pm).
Proces przeksztaÅcania do formatu gettext: jak to dziaÅa?
Idea jest nastÄpujÄ ca: pobranie oryginalnego dokumentu i jego tÅumaczenia i powiedzenie, że n-ty komunikat wyodrÄbniony z tÅumaczenia jest tÅumaczeniem n-tego komunikatu wyodrÄbnionego z oryginaÅu. Aby to zadziaÅaÅo, oba pliki muszÄ mieÄ dokÅadnie takÄ samÄ strukturÄ. Na przykÅad, jeżeli pliki majÄ poniższÄ strukturÄ, to jest raczej niemożliwe, by 4. komunikat tÅumaczenia (typu ``rozdziaÅ'') byÅ tÅumaczeniem 4. komunikatu oryginaÅu (typu ``akapit'').OryginaÅ TÅumaczenie rozdziaÅ rozdziaÅ akapit akapit akapit akapit akapit rozdziaÅ rozdziaÅ akapit akapit akapit
Aby to osiÄ gnÄ Ä, parsery po4a sÄ używane zarówno na pliku oryginaÅu, jak i tÅumaczenia, żeby utworzyÄ pliki po, a nastÄpnie jest budowany z nich trzeci plik po zawierajÄ cy komunikaty z drugiego pliku jako tÅumaczenia komunikatów z pierwszego. Aby sprawdziÄ, że komunikaty, które ze sobÄ ÅÄ czymy, sÄ rzeczywiÅcie odpowiadajÄ cymi sobie tÅumaczeniami, parsesy dokumentów w po4a powinny umieszczaÄ informacje o typach skÅadniowych komunikatów wyodrÄbnionych z dokumentu (wszystkie istniejÄ ce to robiÄ , Twój też powinien). NastÄpnie te informacje sÄ używane do sprawdzenia, że oba dokumenty majÄ tÄ samÄ skÅadniÄ. W poprzednim przykÅadzie pozwoliÅo nam to wykryÄ, że 4. komunikat jest w jednym przypadku akapitem, a w drugim - tytuÅem rozdziaÅu i zgÅosiÄ problem.
Teoretycznie byÅoby możliwe zsynchronizowanie plików po wykryciu problemu (tak, jak to robi diff). Niestety, nie jest jasne, co zrobiÄ z komunikatami, które nie wystÄpujÄ c w jednym z plików, byÅy przyczynÄ rozsynchronizowania. Dlatego obecna implementacja nie stara siÄ synchronizowaÄ plików i zgÅasza bÅÄ d, kiedy coÅ poszÅo źle, wymagajÄ c od użytkownika rÄcznego zmodyfikowania plików w celu rozwiÄ zania problemu.
Nawet z tymi zabezpieczeniami, rzeczy mogÄ Åºle siÄ potoczyÄ. WÅaÅnie dlatego wszystkie tÅumaczenia odgadniÄte w ten sposób sÄ zaznaczane jako niepewne (``fuzzy''), aby tÅumacz je przejrzaÅ i sprawdziÅ.
ZaÅÄ cznik: Jak to dziaÅa?
Hmm, to caÅkiem proste. TÅumaczony dokument nie jest bezpoÅrednio zapisywany na dysk, ale trzymany w pamiÄci, dopóki wszystkie zaÅÄ czniki nie zostanÄ dodane. Wykorzystane algorytmy sÄ raczej proste. Szukamy linii pasujÄ cej do wyrażenia regularnego okreÅlajÄ cego pozycjÄ i dodajemy zaÅÄ cznik przed tÄ linÄ , jeÅli tryb = before. JeÅli nie jesteÅmy w tym trybie, to szukamy nastÄpnej linii pasujÄ cej do ograniczenia i wstawiamy zaÅÄ cznik po tej linii, jeÅli jest to "endboundary", lub przed niÄ , jeÅli jest to "beginboundary".FAQ
Ten rozdziaÅ zawiera odpowiedzi na czÄsto zadawane pytania. Tak naprawdÄ, wiÄkszoÅÄ tych pytaÅ może byÄ sformuÅowanych jako ``Dlaczego po4a zostaÅo zaprojektowane tak, a nie inaczej?''. JeÅli wydaje Ci siÄ, że po4a nie jest wÅaÅciwym narzÄdziem do tÅumaczenia dokumentacji, powinieneÅ rozważyÄ przeczytanie tego rozdziaÅu. JeÅli nie znajdziesz w nim odpowiedzi na swoje pytanie, prosimy siÄ z nami skontaktowaÄ poprzez listÄ dyskusyjnÄ <po4a-devel@lists.alioth.debian.org>. Uwielbiamy znaÄ opinie użytkowników.Dlaczego trzeba tÅumaczyÄ każdy akapit osobno?
Tak, w po4a, każdy akapit jest tÅumaczony osobno (w zasadzie, to każdy moduÅ o tym decyduje, ale wszystkie istniejÄ ce moduÅy tak robiÄ i Twój także powinien). SÄ dwie gÅówne przyczyny takiego rozwiÄ zania:- *
- Kiedy techniczne czÄÅci dokumentu sÄ ukryte, tÅumacz nie może w nich zrobiÄ baÅaganu. Im mniej znaczników pokazujemy tÅumaczowi, tym mniej bÅÄdów może popeÅniÄ.
- *
- Przycinanie dokumentu pomaga odizolowaÄ zmiany w oryginalnym dokumencie. Kiedy oryginaÅ zostanie zmieniony, ten proces uproÅci wyszukanie czÄÅci tÅumaczeÅ potrzebujÄ cych aktualizacji.
Nawet biorÄ c pod uwagÄ te plusy, niektórym ludziom nie podoba siÄ osobne tÅumaczenie każdego akapitu. Postaram siÄ odpowiedzieÄ na ich obawy:
- *
- Takie podejÅcie sprawdziÅo siÄ w projekcie KDE, pozwalajÄ c temu zespoÅowi na wyprodukowanie znacznej iloÅci przetÅumaczonej i aktualnej dokumentacji.
- *
- TÅumacze mogÄ wciÄ Å¼ używaÄ kontekstu tÅumaczenia, ponieważ wszystkie komunikaty w pliku po sÄ w takiej samej kolejnoÅci jak w oryginalnym dokumencie. TÅumaczenie sekwencyjne jest podobne, niezależnie, czy używa siÄ po4a czy nie. I w każdym wypadku najlepszym sposobem otrzymania kontekstu pozostaje skonwertowanie dokumentu do formatu dokumentu drukowanego, ponieważ formaty źródÅowe tekstu mogÄ nie byÄ zbyt czytelne.
- *
- Takie podejÅcie jest używany przez profesjonalnych tÅumaczy. Zgadzam siÄ, majÄ oni trochÄ inne cele niż tÅumacze oprogramowania open-source. Na przykÅad możliwoÅÄ Åatwego zarzÄ dzania tÅumaczeniem jest czÄsto dla nich mniej istotna, ponieważ zawartoÅÄ rzadko siÄ zmienia.
Dlaczego nie podzieliÄ na zdania (lub mniejsze czÄÅci)?
Profesjonalne narzÄdzie tÅumaczy czasami dzielÄ dokument na poszczególne zdania, aby zmaksymalizowaÄ wykorzystanie wczeÅniejszych tÅumaczeÅ i zwiÄkszyÄ szybkoÅÄ tÅumaczenia. Problemem jest jednak to, że w zależnoÅci od kontekstu to samo zdanie może mieÄ kilka tÅumaczeÅ.Akapity sÄ z definicji dÅuższe niż zdania. Jeżeli w dwóch dokumentach ten sam akapit wystÄpuje, to możemy zaÅożyÄ, że jego znaczenie (i tÅumaczenie) jest takie samo, niezależnie od kontekstu.
Dzielenie na czÄÅci mniejsze niż zdania byÅoby czymÅ bardzo niedobrym. Za dużo miejsca by zajÄÅo napisanie tu wyjaÅnienie dlaczego, ale zainteresowany czytelnik może na przykÅad przeczytaÄ stronÄ podrÄcznika Locale::Maketext::TPJ13(3pm) (pochodzÄ cÄ z dokumentacji Perla). W skrócie, każdy jÄzyk ma okreÅlone zasady skÅadniowe i nie istnieje taki sposób budowania zdaÅ przez ÅÄ czenie ich czÄÅci, który by dziaÅaÅ dla wszystkich istniejÄ cych jÄzyków (lub nawet dla tylko 5 czy 10 najpopularniejszych).
Dlaczego nie umieÅciÄ oryginaÅu jako komentarza do tÅumaczenia (lub w inny sposób)?
Na pierwszy rzut oka gettext nie wydaje siÄ byÄ przeznaczony do wszystkich rodzajów tÅumaczeÅ. Na przykÅad nie wydawaÅ siÄ on byÄ przystosowany do debconfa, interfejsu wszystkich pakietów Debiana używanego do interakcji z użytkownikiem podczas instalacji. W tym przypadku teksty do tÅumaczenia byÅy caÅkiem krótkie (tuzin linii dla każdego pakietu) i byÅo trudno umieÅciÄ tÅumaczenie w specjalnym pliku ponieważ musiaÅo byÄ dostÄpne jeszcze przed zainstalowaniem pakietu.To dlatego opiekun debconfa zdecydowaÅ zaimplementowaÄ inne rozwiÄ zanie, w którym tÅumaczenia sÄ umieszczane w tym samym pliku, co oryginaÅ. Jest to pociÄ gajÄ ce. KtoÅ mógÅby nawet chcieÄ coÅ takiego zrobiÄ dla XML-a na przykÅad. MógÅby on wyglÄ daÄ 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 byÅo to na tyle problematyczne, że obecnie jest używane rozwiÄ zanie oparte na plikach po. Tylko oryginalny tekst może byÄ edytowany w pliku, a tÅumaczenia muszÄ siÄ pojawiÄ w plikach po, wyciÄ gniÄtych z gÅównego szablonu (ÅÄ czonych z powrotem w czasie kompilacji pakietu). Ten stary system jest potÄpiany z kilku powodów:
- *
- problemy w zarzÄ
dzaniu
Jeżeli kilku tÅumaczy dostarczy ÅatÄ w tym samym czasie, bÄdzie trudno poÅÄ czyÄ te Åaty wszystkie razem.
Jak wykryÄ te zmiany w oryginale, które muszÄ byÄ zastosowane w tÅumaczeniach? Aby użyÄ programu diff, trzeba byÅo zanotowaÄ wersjÄ oryginaÅu, która zostaÅa przetÅumaczone. Tj. potrzebujesz pliku po w Twoim pliku.
- *
- problemy z kodowaniem znaków
RozwiÄ zanie to jest dobre tylko dla europejskich jÄzyków, jednak wprowadzenie koreaÅskiego, rosyjskiego lub arabskiego bardzo wszystko komplikuje. RozwiÄ zaniem mógÅby byÄ UTF, jednak wciÄ Å¼ jest z nim kilka problemów.
Co wiÄcej takie problemy sÄ trudne do wychwycenia (tj. tylko KoreaÅczycy zauwaÅ¼Ä Å¼e kodowanie znaków w koreaÅskim tekÅcie jest zepsute [bo tÅumacz byÅ Rosjaninem]).
gettext rozwiÄ zuje wszystkie te problemy razem.
Ale gettext nie zostaŠzaprojektowany do takiego użycia!
To prawda, ale do tej pory nikt nie znalazÅ lepszego rozwiÄ zania. JedynÄ znanÄ alternatywÄ jest rÄczne tÅumaczenie ze wszystkimi problemami w jego zarzÄ dzaniu.Co z innymi narzÄdziami do tÅumaczeÅ dokumentacji wykorzystujÄ cymi gettext?
O ile mi wiadomo, sÄ tylko dwa takie:- poxml
- Jest to narzÄdzie rozwijane przez ludzi z KDE obsÅugujÄ
ce format DocBook XML. O ile mi wiadomo, byÅ to pierwszy program wyciÄ
gajÄ
cy ÅaÅcuchy znaków do przetÅumaczenia z dokumentacji do plików po i wstawiajÄ
cy je z powrotem po przetÅumaczeniu.
Może on obsÅugiwaÄ tylko XML i czÄÅciowo DTD. Jestem bardzo niezadowolony z obsÅugi list, które zostajÄ umieszczone w jednym wielkim msgid. Kiedy lista staje siÄ dÅuga, sprawa siÄ komplikuje.
- po-debiandoc
- Program utworzony przez Denisa Barbiera jest poprzednikiem moduÅu sgml po4a, który w mniejszym bÄ dź wiÄkszym stopniu go zastÄpuje, czyniÄ c przestarzaÅym. Zgodnie ze swÄ nazwÄ obsÅuguje tylko debiandoc DTD, który jest DTD mniej lub bardziej przestarzaÅym.
NajwiÄkszÄ zaletÄ po4a nad nimi jest ÅatwoÅÄ umieszczania dodatkowej zawartoÅci (co jest nawet gorsze tutaj) i przejÅcia na format gettext.
Przekazywanie deweloperom wiedzy o tÅumaczeniu
PróbujÄ c tÅumaczyÄ dokumentacjÄ lub programy można napotkaÄ trzy rodzaje problemów: lingwistyczne (nie każdy mówi dwoma jÄzykami), techniczne (to dlatego istnieje po4a) i ludzkie. Nie wszyscy deweloperzy rozumiejÄ potrzebÄ tÅumaczeÅ. Nawet majÄ c dobre chÄci, mogÄ ignorowaÄ potrzebÄ upraszczania pracy tÅumaczy. Aby w tym pomóc, po4a dostarcza wiele dokumentacji, do której można siÄ odnosiÄ.Innym ważnym punktem jest to, że każdy plik z tÅumaczeniem zaczyna siÄ od krótkiego komentarza okreÅlajÄ cego, czym jest ten plik i jak go użyÄ. Powinno to pomóc deweloperom, zalanym tonami plików w różnych jÄzykach, których nie znajÄ , pomóc w poprawnym obsÅużeniu tego.
W projekcie po4a przetÅumaczone dokumenty nie sÄ plikami źródÅowymi. Ponieważ jesteÅmy przyzwyczajeni do tego, że pliki sgml sÄ plikami źródÅowymi, Åatwo jest o pomyÅkÄ. Dlatego wszystkie pliki zawierajÄ taki nagÅówek:
| **************************************************** | * PLIK WYGENEROWANY, NIE EDYTOWAÄ * | * TO NIE JEST PLIK ŹRÃDÅOWY, ALE WYNIK KOMPILACJI * | **************************************************** | | Ten plik zostaÅ wygenerowany przez po4a-translate(1). Nie przechowuj go | (na przykÅad w CVS-ie), ale przechowuj plik po, użyty jako plik źródÅowy | przez polecenie po4a-translate. | | Tak naprawdÄ, potraktuj ten plik jako plik binarny, a plik po jako zwykÅy | plik źródÅowy: jeÅli plik po zaginie, to bÄdzie trudniej zachowaÄ aktualnoÅÄ | tego tÅumaczenia ;)
Podobnie, to co należy zrobiÄ ze zwykÅymi plikami po programu gettext, to skopiowaÄ je do katalogu po/. Ale w przypadku plików zarzÄ dzanych przez po4a to nie dziaÅa. NajwiÄkszym ryzykiem tutaj jest to, że deweloper usunie istniejÄ ce tÅumaczenia jego programu wraz z tÅumaczeniami dokumentacji. (Oba nie mogÄ byÄ przechowywane w jednym pliku po, ponieważ program wymaga instalacji pliku tÅumaczeÅ jako pliku mo, podczas gdy dokumentacja używa tÅumaczeÅ w czasie kompilacji). Dlatego pliki po tworzone przez moduÅ po-debiandoc zawierajÄ poniższy nagÅówek:
# # RADY DLA DEWELOPERÃW: # - nie trzeba rÄcznie edytowaÄ plików POT i PO. # - ten plik zawiera tÅumaczenie Twoich szablonów confiteor. # Nie zastÄpuj tÅumaczeÅ Twojego programu tym plikiem !! # (albo tÅumacze bÄdÄ na Ciebie wÅciekli) # # RADY DLA TÅUMACZY: # JeÅli nie jesteÅ zaznajomiony z formatem PO, warto przeczytaÄ # dokumentacjÄ pakietu gettext, zwÅaszcza sekcje poÅwiÄcone # temu formatowi. Na przykÅad uruchom: # info -n "(gettext)PO Files" # info -n "(gettext)Heder Centry" # # Informacje specyficzne po-debconf sÄ dostÄpne w # /usr/share/doc/po-debconf/README-trans # lub http://www.debian.org/intl/l10n/po-debconf/README-trans #
PODSUMOWANIE plusów i minusów rozwiÄ zania opartego na gettext
- *
- TÅumaczenia nie sÄ trzymane wraz z oryginaÅem, co pozwala w prosty sposób wykryÄ, czy tÅumaczenia nie sÄ przestarzaÅe.
- *
- TÅumaczenia sÄ przechowywane w oddzielnych plikach, dziÄki czemu tÅumacze różnych jÄzyków sobie nie przeszkadzajÄ , zarówno kiedy podsyÅajÄ swoje tÅumaczenia, jak i kiedy zmieniajÄ kodowanie znaków pliku.
- *
- WewnÄtrznie jest oparty na pakiecie "gettext" (ale "po4a" oferuje bardzo prosty interfejs, tak że nie ma potrzeby poznawania wewnÄtrznych mechanizmów, aby go użyÄ). W ten sposób, nie musimy ponownie wymyÅlaÄ koÅa, a ponieważ gettext jest szeroko używany, mamy nadziejÄ, że w wiÄkszym lub mniejszym stopniu jest wolny od bÅÄdów.
- *
- Z punktu widzenia koÅcowego użytkownika nic siÄ nie zmieniÅo (poza tym, że tÅumaczenia sÄ lepiej zarzÄ dzane). Wynikowe pliki z dokumentacjÄ sÄ tak samo dystrybuowane.
- *
- TÅumacze nie muszÄ uczyÄ siÄ skÅadni nowego pliku i mogÄ po prostu użyÄ swojego ulubionego edytora plików po (jak tryb po emasca, kbabel lub gtranslator).
- *
- Gettext udostÄpnia prosty sposób otrzymania statystyk o tym, co zostaÅo zrobione, co powinno byÄ przejrzane i zaktualizowane, a co jeszcze jest do zrobienia. PrzykÅady można znaleÅºÄ pod tymi adresami:
- http://kbabel.kde.org/img/previewKonq.png - http://www.debian.org/intl/l10n/
Nie wszystko zÅoto, co siÄ Åwieci - to podejÅcie ma także kilka minusów, z którymi musimy sobie poradziÄ.
- *
- Na pierwszy rzut oka zaÅÄ czniki sÄ ... dziwne.
- *
- Nie można dostosowywaÄ tÅumaczonego tekstu do wÅasnych upodobaÅ, na przykÅad przez podzielenie w danym miejscu na akapity, poÅÄ czenie dwóch innych akapitów w jeden. Jednak w pewnym sensie, jeżeli jest jakiÅ problem z oryginaÅem, powinno to zostaÄ zgÅoszone jako bÅÄ d.
- *
- Nawet majÄ
c Åatwy interfejs, wciÄ
ż pozostaje nowym narzÄdziem, którego trzeba siÄ uczyÄ.
Jednym z moich marzeÅ jest zintegrowanie w jakiÅ sposób po4a z programami gtranslator lub kbabel. Kiedy plik sgml jest otwierany, komunikaty zostajÄ automatycznie wyciÄ gane. Kiedy jest zamykany, przetÅumaczony plik jest zapisywany na dysk. JeÅli uda nam siÄ zrobiÄ moduÅ MS Word (TM) (a przynajmniej RFT), to bÄdÄ mogli go nawet używaÄ profesjonalni tÅumacze.
Znane bÅÄdy i i Å¼Ä dania nowych funkcjonalnoÅci
NajważniejszÄ sprawÄ (oprócz brakujÄ cych moduÅów) jest obsÅuga kodowania znaków. RozwiÄ zaniem mogÅoby byÄ dodanie pragmy Perla UTF-8 i rekodowanie komunikatów na wyjÅciu, ale nie jest to jeszcze zrobione.ChcielibyÅmy wydzieliÄ czÄÅÄ kodu (dotyczÄ cego wstawiania plików) moduÅu sgml z powrotem do TransTractora, tak żeby pozostaÅe moduÅy mogÅy z niego korzystaÄ, ale to nie bÄdzie zmiana widoczna dla użytkownika.
AUTORZY
Denis Barbier <barbier,linuxfr.org> Martin Quinson (mquinson#debian.org)
TÅUMACZENIE
Robert Luberda <robert@debian.org>
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre