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.");
with:
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

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.

25.2.3. Zdroje

More information about what lies behind the internationalization and localization process is presented and demonstrated in: