Vyvinul | Projekt GNU |
---|---|
Poslední verze | 0,21 (27. července 2020) |
Vklad | git.savannah.gnu.org/cgit/gettext.git |
Napsáno | VS |
Jazyky podpory | Krajta |
Operační systém | GNU / Linux , BSD ( d ) , Microsoft Windows a macOS |
životní prostředí | Cross-platform |
Typ | Internacionalizace |
Licence | GNU GPL |
Dokumentace | gnu.org/software/gettext/manual |
webová stránka | www.gnu.org/s/gettext |
gettext je softwarová knihovna v projektu GNU , která slouží k softwaru internacionalizace (i18n). Běžně se používá k psaní vícejazyčných programů .
Zdrojový kód je nejstaršího použít volání funkce GNU gettext. U většiny jazyků se to provádí vložením řetězců pro uživatele do funkce gettext. Aby se ušetřil čas při psaní a objasnil kód, pro tuto funkci se obvykle používá substituční alias _, takže kód C :
printf(gettext("My name is %s.\n"), my_name);stát se
printf(_("My name is %s.\n"), my_name);gettext poté použije zadaný řetězec jako klíč pro vyhledávání překladu a vrátí původní řetězec, pokud není k dispozici překlad, na rozdíl od systémů, jako jsou catgety nebo použití Loadstring v systému Microsoft Windows , kde se používá programovací identita (často celé číslo).
Kromě C je funkce GNU gettext implementována v: C ++ , Objective C , SH script, bash script, Python , OCaml , GNU CLISP , Emacs Lisp, librep, GNU Smalltalk , Ruby , Java , GNU awk , Pascal , wxWidgets ( podle wxLocale), YCP (YaST2 jazyk), Tcl , Perl , PHP , Pike , a R . Ve většině případů je jeho použití podobné jako u C.
xgettext se použije na zdroje k vytvoření souboru .pot nebo šablony, která obsahuje seznam všech přeložitelných řetězců extrahovaných z kódu. V příkladu výše by položka v souboru .pot vypadala takto:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "" Komentáře pro překladatelePokud chce vývojář poskytnout překladateli nápovědu pro konkrétní řetězec, může tak učinit ve zdrojovém kódu pomocí tagu (TAG) určeného pro xgettext, který mu umožní filtrovat tyto nápovědy a umístit je do souboru .pot. Tyto indikace ukáže KBabel a 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.V tomto příkladu je značka // a musí být dodána do xgettext, aby mohla při vytváření souboru .pot extrahovat komentáře pro překladatele. Jiné znaky lze použít jako štítek, pokud jsou v kódu použity konzistentně.
xgettext -c=//S komentáři by soubor .pot vypadal takto:
#. 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 ""Překladač odvozuje soubor .po ze šablony pomocí programu msginit a poté vyplní překlady. msginit inicializuje překlady, abyste například vytvořili francouzský překlad, musíte spustit:
msginit --locale=fr --input=name.potTím se generuje fr.po. Příklad záznamu by byl:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "My name is %s.\n"Překladatel je musí opravit buď ručně, nebo pomocí překladatelského nástroje, jako je PoEdit . Po dokončení by položka vypadala takto:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "Je m'appelle %s.\n"Nakonec jsou soubory .po zkompilovány do binárních souborů .mo s msgfmt. Poté jsou připraveni k distribuci v softwarovém balíčku.
Uživatel, na Unix-like systémech, upraví LANG prostředí proměnné, nebo v případě, že jazyk se musí lišit od LANG, LC_MESSAGES a program pak zobrazí řetězce ve vybraném jazyce, je-li přítomen soubor .mo a v případě, že národní prostředí z jsou nainstalovány příslušné jazyky.