Najlepsze pytania
Chronologia
Czat
Perspektywa
GNU gettext
narzędzia internacjonalizacji GNU Z Wikipedii, wolnej encyklopedii
Remove ads
gettext – pakiet oprogramowania, stworzony w ramach projektu GNU, służący do internacjonalizacji programów komputerowych na uniksopodobnych systemach operacyjnych. Najpopularniejsza implementacja gettext jest rozwijana przez Projekt GNU w ramach wolnego oprogramowania.

Historia
gettext został stworzony w Sun Microsystems na początku lat 90. XX w. Wersja stworzona przez Projekt GNU została wydana w 1995 roku.
Zastosowanie
Podsumowanie
Perspektywa
Kod programu
W większości języków programowania, aby dany ciąg został przetłumaczony, należy go otoczyć funkcją gettext, która w celu skrócenia inwokacji i liczby potrzebnych do wpisania znaków, jest aliasowana do _, więc w kodzie C zamiast:
printf(gettext("My name is %s.\n"), my_name);
uzyskamy
printf(_("My name is %s.\n"), my_name);
Komentarze umieszczone zaraz po /// umieszczone tuż przed tłumaczeniem są potem dostępne jako wskazówki dla tłumaczy.
gettext używa podanego ciągu znaków (tradycyjnie w języku angielskim) jako odnośnika do znalezienia alternatywnego tłumaczenia i zwraca oryginalny ciąg, jeśli takiego tłumaczenia nie znajdzie. Jest to alternatywa dla działań takich funkcji jak POSIX-owa catgets, GetString z AmigaOS, czy LoadString w Microsoft Windows, gdzie używany jest identyfikator ciągu, często będący liczbą naturalną.
Program xgettext służy do ekstrakcji tłumaczeń z kodu źródłowego i tworzenia z nich plików .pot, których zawartość jest szablonem dla tłumacza.
Przykład
Przykładowy kod do tłumaczenia:
/// TRANSLATORS: Please leave %s as it is, because it is needed by the program.
/// Thank you for contributing to this project.
printf(_("My name is %s.\n"), my_name);
Po uruchomieniu xgettext:
xgettext --add-comments=/ file.c
Wynikowy plik szablonowy .pot będzie wyglądał mniej więcej tak:
#. TRANSLATORS: Please leave %s as it is, because it is needed by the program. #. Thank you for contributing to this project. #: src/name.c:36 msgid "My name is %s.\n" msgstr ""
Tłumaczenie
Tłumacz tworzy plik .po (zawierający tłumaczenie) z szablonu używając programu msginit, gdzie uzupełnia tłumaczenia. Przykładowo dla języka polskiego będzie to:
msginit --locale=pl --input=name.pot
Remove ads
Tworzenie plików z tłumaczeniem
Podsumowanie
Perspektywa
Pliki z tłumaczeniem - .po lub .pot (pusty szablon) mogą zostać stworzone ręcznie lub przez narzędzie xgettext dostarczane z pakietem. Opis programu otrzymamy pisząc:
$ xgettext --help
Jeśli korzystamy w swym projekcie z programów autoconf/automake, to stworzenie pliku .pot wykonamy przez wydanie polecenia:
cd po/ make <nazwa_projektu>.pot
Program ten utworzy plik pl.po, który tłumacz edytuje ręcznie lub przy użyciu narzędzi takich jak Poedit, Emacs lub Vim, które posiadają tryb edycji plików tłumaczeń gettext. Przetłumaczony wpis może wyglądać tak:
#. TRANSLATORS: Please leave %s as it is, because it is needed by the program. #. Thank you for contributing to this project. #: src/name.c:36 msgid "My name is %s.\n" msgstr "Mam na imię %s.\n"
W finałowym stadium pliki .po zamieniane są na binarny format .mo przy użyciu programu msgfmt. Tak przygotowane pliki są gotowe do dystrybucji w paczce.
Liczby mnogie wyrazów
W przypadku słów, które zmieniają się w zależności od liczebności np. 1 tydzień, 2 tygodnie, można użyć składni liczb mnogich. Aby uzyskać tłumaczenia z liczebnikami należy:
1. Dodać odpowiednie wyrażenie w nagłówku pliku .po, dla języka polskiego może wyglądać tak:
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
2. Należy dodać tłumaczenie „liczebnikowe”:
msgid "week" msgid_plural "weeks" msgstr[0] "tydzień" msgstr[1] "tygodnie" msgstr[2] "tygodni"
3. Teraz możemy użyć funkcji ngettext, do której należy podać liczbę pojedynczą, liczbę mnogą oraz licznik, na przykład dla języka PHP:
echo "minęły 4 " . ngettext("week", "weeks", 4);
// minęły 4 tygodnie
Działanie
W większości uniksowych systemów operacyjnych, po ustawieniu zmiennej środowiskowej LC_MESSAGES, użytkownik uzyska tłumaczenie jakiegoś programu pod warunkiem, że istnieje plik .mo dla jego lokalizacji.
Implementacje
Oprócz standardowej biblioteki dla języka C istnieją również bindingi dla języków programowania takich jak:
Zobacz też
Linki zewnętrzne
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
