GNU gettext
Z Wikipedii
GNU gettext to pakiet oprogramowania, stworzony w ramach projektu GNU, służący do internacjonalizacji programów komputerowych poprzez tłumaczenie ich komunikatów. W skład pakietu wchodzą narzędzia do tworzenia i obróbki plików z tłumaczeniami komunikatów (pliki .po) oraz funkcje biblioteczne m.in. dla języka C.
Spis treści |
[edytuj] Zastosowanie w programie
#include <locale.h> /* dla funkcji setlocale() */ #include <libintl.h> /* dla gettext'a */ char *domena_naszego_programu; /* nazwa, pod którą gettext będzie szukał komunikatów */ [...] setlocale(LC_ALL, ""); /* ustawienie zmiennych językowych (tu pobierane ze środowiska) */ domena_naszego_programu = textdomain ("nasza_domena"); /* ustawienie tzw. 'text domain' */ [...]
I tu, zamiast
printf("Komunikat oryginalny");
wstawiamy:
- printf(gettext("Komunikat oryginalny"));
- printf(_("Komunikat oryginalny"));
- printf(N_("Komunikat oryginalny"));
Jeśli Komunikat oryginalny zostanie przetłumaczony w pliku dla odpowiedniego języka, to wyświetlone zostanie jego tłumacznie.
Patrz: Kod na Wikipedii
[edytuj] Struktura plików .po
Mają one bardzo prostą strukturę, polegającą na powtarzaniu par msgid i msgstr, z których pierwsze zawiera treść komunikatu oryginalnego, a drugie tłumaczenie. Przykład:
msgid "Komunikat oryginalny" msgstr "Tłumaczenie komunikatu"
[edytuj] Tworzenie plików z tłumaczeniem
Pliki z tłumaczniem - .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
Tak stworzone i przetłumaczone pliki tekstowe należy przekształcić do postaci binarnej poleceniem msgfmt (informacja o użyciu: opcja --help) oraz przekopiować powstałe pliki .mo (najczęściej) do pliku /usr/share/locale/<język, np. 'pl'>/LC_MESSAGES/<nazwa_projektu>.mo.
[edytuj] Dodatkowe informacje
[edytuj] Podręcznik systemowy
Więcej informacji na stronach podręcznika systemowego:
- gettext
- setlocale
- locale