Označení řetězců k překladu
Řetězcové literály by se měly ve zdrojovém kódu psát v angličtině a zároveň by měly být uzavřeny do volání funkce gettext(). Pak budou vytaženy pro překlad a překlad bude použit za běhu místo původního anglického řetězce.
Balíček GNU gettext umožňuje označit řetězce ve zdrojovém kódu k překladu, vytáhnout tyto řetězce pro překlad a použít přeložené řetězce v aplikaci.
However, Glib defines gettext() support macros which are shorter wrappers in an easy-to-use form. To use these macros, include <glibmm/i18n.h>, and then, for example, substitute:
display_message("Getting ready for i18n.");
display_message(_("Getting ready for i18n."));
For reference, it is possible to generate a file which contains all strings which appear in your code, even if they are not marked for translation, together with file name and line number references. To generate such a file named my-strings, execute the following command, within the source code directory:
xgettext -a -o moje-řetězce --omit-header *.cc *.h
Finally, to let your program use the translation for the current locale, add this code to the beginning of your main.cc file, to initialize gettext.
bindtextdomain(GETTEXT_PACKAGE, PROGRAMNAME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE);
- 25.2.1. Jak gettext funguje
- 25.2.2. Testování a přidávání překladů
- 25.2.3. Zdroje
25.2.1. Jak gettext funguje
The intltool-update or xgettext script extracts the strings and puts them in a mypackage.pot file. The translators of your application create their translations by first copying this .pot file to a localename.po file. A locale identifies a language and an encoding for that language, including date and numerical formats. Later, when the text in your source code has changed, the msgmerge or intltool-update script is used to update the localename.po files from the regenerated .pot file.
Před instalací jsou soubory .po převedeny do binárního formátu (s příponou .mo) a při instalaci se nakopírují do systémové složky pro lokalizační soubory, například /usr/share/locale/.
Když je aplikace spuštěna, knihovna gettext zkontroluje systémovou složku, jestli v ní je soubor .mo pro národní prostředí uživatele (národní prostředí můžete nastavit například příkazem „export LANG=cs_CZ.UTF-8“ z příkazové řádky). Až později běžící aplikace narazí na volání gettext, podívá se po překladu konkrétního řetězce. Pokud jej nenajde, použije se řetězec původní.
25.2.2. Testování a přidávání překladů
To convince yourself that you've done well, you may wish to add a translation for a new locale. In order to do that, go to the po subdirectory of your project and execute the following command:
intltool-update --pot
Vytvoří se tím soubor nazevaplikace.pot. Zkopírujte tento soubor do kodjazyka.po, třeba cs.po nebo hu.po. Příslušný jazyk také přidejte do souboru LINGUAS. Soubor .po obsahuje hlavičku a seznam anglických řetězců s rezervovaným místem pro zadání přeložených řetězců. Ujistěte se, že je kódování souboru .po nastavené na UTF-8 (je to uvedené v hlavičce a musí být v tomto kódování i řetězce).
Je možné, že některé řetězce budou v souboru .po označené jako fuzzy. Tyto překlady nenahradí originální řetězce. Aby se objevily, stačí po kontrole, a případné opravě překladu, odstranit značku fuzzy.