Locale::Po4a::Man(3pm) | Narzędzia po4a | Locale::Po4a::Man(3pm) |
Locale::Po4a::Man - konwersja stron podręcznika z/do plików PO
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.
Locale::Po4a::Man jest modułem ułatwiającym tłumaczenie dokumentacji w formacie nroff (język stron podręcznika ekranowego) do innych języków [używanych przez ludzi].
Moduł bardzo się stara, aby ułatwić życie tłumacza. Dlatego tekst prezentowany tłumaczowi nie jest dosłowną kopią oryginalnego tekstu strony podręcznika. W istocie, ukrywane są surowe części formatu nroff, tak żeby tłumacze nie zrobili w nich bałaganu.
Teksty niewciętych akapitów są automatycznie zawijane dla wygody tłumacza. Może to prowadzić do niewielkich różnic w wygenerowanym pliku wyjściowym, ponieważ reguły zawijania tekstu używane przez groffa nie są jasne - na przykład czasami groff zachowuje dwie spacje występujące po nawiasie.
Tak czy owak, różnica będzie dotyczyła tylko rozmieszczenia dodatkowych spacji w zawiniętym tekście akapitu.
Pierwsza zmiana dotyczy specyfikacji zmian czcionek. W nroffie istnieje kilka sposobów określenia, że podane słowo powinno być napisane czcionką małą, wytłuszczoną lub kursywą. W tekście do przetłumaczenia można to zrobić tylko na jeden sposób, zapożyczony z formatu POD (formatu dokumentacji Perla):
Uwaga: CW nie jest dostępne dla wszystkich urządzeń groffa. Używanie go nie jest zalecane. Jest dostarczone dla wygody użytkownika.
Po4a automatycznie zamienia niektóre znaki, aby ułatwić tłumaczenia lub przeglądanie tłumaczeń. Lista takich transliteracji:
Tłumacze mogą wymusić wstawienie łącznika, używając w swoich tłumaczeniach kodu "\[hy]" groffa.
Aby uniknąć tych transliteracji, tłumacze mogą umieścić zerowej szerokości znak roffa (np. używając odpowiednio `\&` lub '\&').
Ponieważ znaki te są używane do oddzielania części objętych zmianą czcionki, nie można ich używać wprost. Zamiast nich trzeba użyć E<lt> i E<gt> (jak w POD, po raz kolejny).
Opcje tego modułu:
Wybiera dokładniejszą obsługę formatu mdoc, nakazuję po4a nietłumaczenie sekcji "NAME" (NAZWA). Strony mdoc, zawierające przetłumaczoną sekcję "NAME", nie generują nagłówka ani stopki.
Zgodnie ze stroną podręcznika groff_mdoc,
wymagane są sekcje NAME (NAZWA), SYNOPSIS (SKŁADNIA)oraz
DESCRIPTION (OPIS). Chociaż nie ma żadnych znanych
problemów z przetłumaczonymi sekcjami SYNOPSIS czy
DESCRIPTION, to ich tłumaczenie można
również pominąć za pomocą:
-o mdoc=NAME,SYNOPSIS,DESCRIPTION
Kwestię mdoc można także
rozwiązać, używając załącznika
podobnego do poniższego:
PO4A-HEADER:mode=before;position=^.Dd
.TH DOCUMENT_TITLE 1 "Month day, year" OS "Section
Name"
Poniższe opcje pozwalają określić zachowanie nowego makra (zdefiniowanego poleceniem .de) albo makra nieobsługiwanego przez po4a. Przyjmują jako argument rozdzieloną przecinkami listę makr. Na przykład:
-o noarg=FO,OB,AR -o translate_joined=BA,ZQ,UX
Uwaga: jeśli po4a nie obsługuje danego makra, a uważasz, że jest to standardowe makro roff, proszę to zgłosić zespołowi deweloperów po4a.
Uwaga: nie jest sprawdzane, czy polecenie end ma odpowiadające polecenie begin; jakiekolwiek polecenie kończące zatrzyma tryb no_wrap. Jeżeli istnieje makro begin (odpowiednio end) nie mające pasującego end (odpowiednio begin), to można podać istniejące end (jak fi) lub begin (jak nf) jako zamiennik. Makra te (i ich argumenty) nie będą tłumaczone.
Moduł wciąż ma dużo ograniczeń i zawsze będzie miał, ponieważ nie jest rzeczywistym interpreterem nroffa. Byłoby możliwe wykonanie rzeczywistego interpretera nroffa, aby umożliwić autorom używanie w swoich stronach wszystkich istniejących makr i tworzenie nowych, ale nie chcieliśmy tego robić. Byłoby to zbyt trudne, a przy tym raczej niepotrzebne. Uważamy, że jeżeli autorzy stron podręcznika chcą, żeby ich strony były przetłumaczone, to muszą tak przekształcić strony, by uprościć pracę tłumaczy.
Tak więc, parser stron man zaimplementowany w po4a ma kilka znanych ograniczeń, których nie chcemy poprawiać, i będących pułapkami, których powinieneś unikać, jeśli chcesz, żeby tłumacze opiekowali się Twoją dokumentacją.
nroff jest kompletnym językiem programowania z definicjami makr, instrukcjami warunkowymi itd. Ponieważ parser nie jest pełnowartościowym interpreterem nroffa, zwróci błąd podczas przetwarzania stron zawierających te właściwości. (Na moim komputerze jest około 200 takich stron).
Wciąż istnieje kilka makr, których po4a nie obsługuje. Dzieje się tak dlatego, że nie znalazłem żadnej dokumentacji tych makr. Poniżej jest lista nieobsługiwanych makr znalezionych na moim komputerze. Proszę zauważyć, że ta lista nie jest pełna, ponieważ program kończy się, zwracając błąd, już po napotkaniu pierwszego nieznanego makra. Jeśli masz jakieś informacje o niektórych z nich, z przyjemnością dopiszę ich obsługę. Z powodu tych makr około 250 stron na moim komputerze nie jest dostępnych dla po4a::man.
.. ." .AT .b .bank .BE ..br .Bu .BUGS .BY .ce .dbmmanage .do .En .EP .EX .Fi .hw .i .Id .l .LO .mf .N .na .NF .nh .nl .Nm .ns .NXR .OPTIONS .PB .pp .PR .PRE .PU .REq .RH .rn .S< .sh .SI .splitfont .Sx .T .TF .The .TT .UC .ul .Vb .zZ
Czasem autor wie, że niektóre części strony podręcznika nie powinny być tłumaczone, więc nie powinny być przetwarzane przez po4a. Na przykład opcja może pobierać argument other oraz other może się także pojawić jako ostatni element listu. Pierwsze other nie powinno być tłumaczone, a drugie - powinno.
W takim przypadku, aby po4a pominęło takie komunikaty, autor może użyć specjalnych konstrukcji groffa:
.if !'po4a'hide' .B other
(wymaga to podania opcji -o groff_code=verbatim)
Aby to zautomatyzować, można zdefiniować nowe
makro: .de IR_untranslated
. IR \\$@
..
.IR_untranslated \-q ", " \-\-quiet
(wymaga to podania opcji -o groff_code=verbatim i -o untranslated=IR_untranslated; przy tej konstrukcji warunek .if !'po4a'hide' staje się zbędny, ponieważ po4a nie przetwarza wnętrza definicji makra)
lub używając aliasu:
.als IR_untranslated IR
.IR_untranslated \-q ", " \-\-quiet
Wymaga to podania opcji -o untranslated=als,IR_untranslated.
Podsumowując tę sekcję, pamiętaj, żeby tworzyć proste strony podręcznika ekranowego i nie starać się być zbyt pomysłowym. Roff pozwala na wiele rzeczy, które nie są obsługiwane przez parser. Na przykład: nie rób bałaganu, używając \c do przerwania przetwarzania tekstu (jak to robi 40 stron podręcznika na moim komputerze). Albo: argumenty makr umieszczaj w tej samej linii, co samo makro. Wiem, że nroff dopuszcza rozdzielanie makr i ich argumentów, ale obsługiwanie tego zbytnio by skomplikowało parser.
Oczywiście inną możliwością jest użycie innego formatu, bardziej przyjaznego tłumaczom (jak POD używający po4a::pod albo jednego z rodziny XML, np. SGML), ale nie jest to potrzebne dzięki po4a::man. Jeśli formatem źródłowym Twojej dokumentacji jest POD lub XML, to byłoby mądre, aby przetłumaczyć źródłowy format, a nie ten wygenerowany. W większości wypadków po4a::man rozpozna wygenerowane strony i wypisze odpowiednie ostrzeżenie. A nawet odmówi przetwarzana stron wygenerowanych przez POD, ponieważ te strony są perfekcyjnie obsługiwane przez po4a::pod i ponieważ ich odpowiednik nroffa generuje wiele nowych makr, których nie chcę obsługiwać. Na moim komputerze 1432 spośród 4323 stron jest wygenerowanych z formatu POD i będzie zignorowanych przez po4a::man.
W większości wypadków, po4a::man wykryje problem i odmówi przetwarzania strony, wypisując odpowiedni komunikat. W kilku rzadkich wypadkach, program zakończy się bez żadnego ostrzeżenia, ale plik wynikowy będzie niepoprawny. Takie sytuacje są nazywane "błędami";) Jeśli spotkasz się z taką sytuacją, proszę to zgłosić wraz z odpowiednią poprawką, jeśli to możliwe…
Modułu można używać z większością istniejących stron podręcznika.
Niektóre testy są regularnie uruchamiane na komputerach z Linuksem:
Locale::Po4a::Pod(3pm), Locale::Po4a::TransTractor(3pm), po4a(7)
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
Robert Luberda <robert@debian.org>
Copyright © 2002-2008 SPI, Inc.
Program jest wolnym oprogramowaniem; można go redystrybuować i/lub modyfikować zgodnie z warunkami licencji GPL (patrz plik COPYING).
2020-12-09 | Narzędzia po4a |