Opracowany przez | Projekt GNU |
---|---|
Ostatnia wersja | 0,21 (27 lipca 2020 r) |
Kaucja | git.savannah.gnu.org/cgit/gettext.git |
Napisane w | VS |
Obsługiwane języki | Pyton |
System operacyjny | GNU / Linux , BSD ( d ) , Microsoft Windows i macOS |
Środowisko | Wieloplatformowy |
Rodzaj | Umiędzynarodowienie |
Licencja | GNU GPL |
Dokumentacja | gnu.org/software/gettext/manual |
Stronie internetowej | www.gnu.org/s/gettext |
gettext jest biblioteką oprogramowania z projektu GNU , który służy do umiędzynarodowienia oprogramowania (i18n). Jest powszechnie używany do pisania programów wielojęzycznych .
Kod źródłowy jest najpierw zmodyfikowana tak, aby korzystanie z wywołań funkcji gettext GNU. W przypadku większości języków odbywa się to poprzez wstawienie ciągów znaków dla użytkownika w funkcji gettext. Aby zaoszczędzić czas na pisanie i doprecyzować kod, dla tej funkcji zwykle używany jest zastępczy alias _, dzięki czemu kod C :
printf(gettext("My name is %s.\n"), my_name);stają się
printf(_("My name is %s.\n"), my_name);Następnie gettext używa dostarczonego ciągu jako klucza wyszukiwania tłumaczenia i zwraca oryginalny ciąg, jeśli żadne tłumaczenie nie jest dostępne, w przeciwieństwie do systemów takich jak catgets lub używających Loadstring w systemie Microsoft Windows , w których używana jest tożsamość programistyczna (często liczba całkowita).
Oprócz C, funkcja GNU gettext jest zaimplementowana w: C ++ , Objective C , SH script, bash script, Python , OCaml , GNU CLISP , Emacs Lisp, librep, GNU Smalltalk , Ruby , Java , GNU awk , Pascal , wxWidgets ( przez wxLocale), YCP (język YaST2) TCL , Perl , PHP , Pike i R . W większości przypadków jego użycie jest podobne do stosowania C.
xgettext jest stosowany do źródeł w celu utworzenia pliku .pot lub szablonu, który zawiera listę wszystkich możliwych do przetłumaczenia ciągów znaków wyodrębnionych z kodu. W powyższym przykładzie wpis w pliku .pot wyglądałby następująco:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "" Komentarze dla tłumaczyJeśli programista chce dać tłumaczowi wskazówkę dotyczącą określonego ciągu, może to zrobić w kodzie źródłowym za pomocą tagu (TAG) przeznaczonego dla xgettext, aby umożliwić mu filtrowanie tych wskazówek i umieszczenie ich w pliku .pot. Te wskazania zostaną pokazane przez KBabel i PoEdit .
printf(_("My name is %s.\n"), my_name); // TRANSLATORS: Please leave %s as it is, because it is exchanged by the program. // Thank you for contributing to this project.W tym przykładzie znacznikiem jest // i należy go dostarczyć do xgettext, aby umożliwić wyodrębnienie komentarzy dla tłumaczy podczas budowania pliku .pot. Inne znaki mogą być używane jako etykiety, o ile są używane konsekwentnie w całym kodzie.
xgettext -c=//Z komentarzami plik .pot wyglądałby tak:
#. TRANSLATORS: Please leave %s as it is, because it is exchanged by the program. #. Thank you for contributing to this project. #: src/name.c:36 msgid "My name is %s.\n" msgstr ""Tłumacz pobiera plik .po z szablonu za pomocą programu msginit, a następnie wypełnia tłumaczenia. msginit inicjalizuje tłumaczenia, aby na przykład utworzyć tłumaczenie francuskie, musisz uruchomić:
msginit --locale=fr --input=name.potTo generuje fr.po. Przykładowy wpis to:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "My name is %s.\n"Tłumacz musi je poprawić ręcznie lub za pomocą narzędzia do tłumaczenia, takiego jak PoEdit . Po zakończeniu wpis będzie wyglądał następująco:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "Je m'appelle %s.\n"Na koniec pliki .po są kompilowane do plików binarnych .mo za pomocą msgfmt. Następnie są gotowe do dystrybucji w pakiecie oprogramowania.
Użytkownik, na systemach Unix-like, dostosowuje LANG środowiska zmiennej lub, jeśli język musi być różny od Lang LC_MESSAGES i program wyświetla komunikaty w wybranym języku, jeśli plik .mo jest obecny i jeśli locale dla odpowiedni język jest zainstalowany.