„`html
Wprowadzenie do gettext
gettext to pakiet oprogramowania stworzony w ramach projektu GNU, który wspiera internacjonalizację programów komputerowych na systemach uniksopodobnych. Jego najpopularniejsza implementacja jest rozwijana jako wolne oprogramowanie przez Projekt GNU.
Historia
Oprogramowanie gettext zostało opracowane w Sun Microsystems na początku lat 90. XX wieku, a wersja stworzona przez Projekt GNU zadebiutowała w 1995 roku.
Zastosowanie i działanie
W celu przetłumaczenia ciągu znaków w języku programowania, należy go otoczyć funkcją gettext, często aliasowaną do _. Przykład w języku C:
printf(_("My name is %s.\n"), my_name);
Funkcja gettext zwraca oryginalny ciąg, jeśli nie znajdzie tłumaczenia. Program xgettext pozwala na ekstrakcję tłumaczeń z kodu źródłowego i generowanie plików .pot, które pełnią rolę szablonów dla tłumaczy.
Przykład użycia
Przykładowy kod do tłumaczenia:
/// TRANSLATORS: Please leave %s as it is, because it is needed by the program.
printf(_("My name is %s.\n"), my_name);
Po uruchomieniu xgettext, plik .pot może wyglądać następująco:
#. TRANSLATORS: Please leave %s as it is, because it is needed by the program.
msgid "My name is %s.\n"
msgstr ""
Tłumaczenie i tworzenie plików .po
Tłumacz używa programu msginit do utworzenia pliku .po z szablonu .pot:
msginit --locale=pl --input=name.pot
Pliki .po mogą być edytowane ręcznie lub przy użyciu narzędzi takich jak Poedit, Emacs czy Vim. Przykładowe tłumaczenie może wyglądać tak:
msgid "My name is %s.\n"
msgstr "Mam na imię %s.\n"
Pliki .po są konwertowane na format binarny .mo przy użyciu programu msgfmt, co przygotowuje je do dystrybucji.
Liczby mnogie
Dla słów zmieniających się w zależności od liczby, można użyć składni liczby mnogiej. Należy dodać odpowiednie wyrażenie w nagłówku pliku .po oraz tłumaczenie liczbowe:
msgid "week"
msgid_plural "weeks"
msgstr[0] "tydzień"
msgstr[1] "tygodnie"
msgstr[2] "tygodni"
Przykład użycia funkcji ngettext w PHP:
echo "minęły 4 " . ngettext("week", "weeks", 4);
Implementacje
gettext dostępne jest w wielu językach programowania, w tym:
- C++
- Objective-C
- Python
- PHP
- Ruby
- Java
Oprócz standardowej biblioteki dla C, istnieją bindingi dla innych języków, co czyni gettext wszechstronnym narzędziem do internacjonalizacji.
„`