Příprava vašeho projektu
In the instructions below we will assume that you will not be using gettext directly, but intltool, which was written specifically for GNOME. intltool uses gettext(), which extracts strings from source code, but intltool can also combine strings from other files, for example from desktop menu details, and GUI resource files such as Glade files, into standard gettext .pot/.po files.
We also assume that you are using autotools (e.g. automake and autoconf) to build your project, and that you are using https://gitlab.gnome.org/GNOME/gnome-common/blob/master/autogen.sh or a similar autogen.sh file, which, among other things, takes care of some intltool initialization.
An alternative to gnome-common's autogen.sh may look like this:
#! /bin/sh -e test -n "$srcdir" || srcdir=`dirname "$0"` test -n "$srcdir" || srcdir=. autoreconf --force --install --verbose --warnings=all "$srcdir" echo "Running intltoolize --copy --force --automake" intltoolize --copy --force --automake test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
Vytvořte v kořenové složce vašeho projektu podsložku s názvem po. V budoucnu bude obsahovat všechny překlady. V ní vytvořte soubory s názvy LINGUAS a POTFILES.in. Je běžnou praxí v ní vytvořit také soubor ChangeLog, aby si překladatelé mohli udržovat přehled o změnách v překladech.
Soubor LINGUAS obsahuje abecedně seřazený seznam kódů identifikujících jazyky, do kterých je aplikace přeložená (řádky začínající # jsou komentáře a jsou ignorovány). Jednotlivé kódy jazyků uvedené v LINGUAS musí odpovídat názvům souborů .po. Když má například aplikace překlad do češtiny a japonštiny, měl by váš soubor LINGUAS vypadat nějak takto:
# keep this file sorted alphabetically, one language code per line cs ja
(Podle toho pak musíte mít ve složce po soubory cs.po a ja.po, které budou obsahovat český, respektive japonský překlad.)
Soubor POTFILES.in je seznam cest ke všem souborům, které obsahují řetězce označené k překladu, počínaje kořenovou složkou projektu. Takže když například má váš projekt zdrojové kódy umístěné v podsložce s názvem src a v ní jsou dva soubory obsahující řetězce, které chcete přeložit, může váš soubor POTFILES.in vypadat nějak takto:
src/main.cc src/other.cc
Jestliže používáte gettext přímo, můžete označit k překladu jen řetězce, které jsou přímo ve zdrojových kódech. Pokud ale používáte intltool, můžete označit k překladu i řetězce v různých jiných souborových formátech, včetně souborů Glade s uživatelským rozhraním, souborů ve formátu XML, souborů .desktop a několika dalších. Takže pokud máte aplikaci s uživatelským rozhraním navrženým v Glade, přidejte do POTFILES.in rovněž své soubory .glade.
Nyní máte místo, kam dávat překlady, a teď potřebujete inicializovat intltool a gettext. Přidejte následující kód do svého souboru configure.ac, přičemž „nazevaplikace“ nahraďte názvem svojí aplikace (platí pro celou kapitolu).
IT_PROG_INTLTOOL([0.35.0]) GETTEXT_PACKAGE=programname AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [The domain to use with gettext]) AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.17]) PROGRAMNAME_LOCALEDIR=[${datadir}/locale] AC_SUBST(PROGRAMNAME_LOCALEDIR)
Proměnná NAZEVAPLIKACE_LOCALEDIR bude použita později v souboru Makefile.am k definici makra, které se použije až budeme ve zdrojovém kódu inicializovat gettext.
AM_GLIB_GNU_GETTEXT has been an alternative to AM_GNU_GETTEXT and AM_GNU_GETTEXT_VERSION, but AM_GLIB_GNU_GETTEXT is now deprecated, and shall not be used in new code.
In the top-level Makefile.am:
- Add po to the SUBDIRS variable. Without this, your translations won't get built and installed when you build the program
-
Define INTLTOOL_FILES as:
INTLTOOL_FILES = intltool-extract.in \ intltool-merge.in \ intltool-update.in
- Add INTLTOOL_FILES to the EXTRA_DIST list of files. This ensures that when you do a make dist, these files will be included in the source tarball.
-
Update your DISTCLEANFILES:
DISTCLEANFILES = ... intltool-extract \ intltool-merge \ intltool-update \ po/.intltool-merge-cache
-
Depending on the types of files that contain translatable strings,
add code such as
desktopdir = $(datadir)/applications desktop_in_files = programname.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@
V souboru src/Makefile.am aktualizujte AM_CPPFLAGS přidáním následujících definic maker preprocesoru:
AM_CPPFLAGS = ... -DNAZEVAPLIKACE_LOCALEDIR=\"${NAZEVAPLIKACE_LOCALEDIR}\"
Toto makro se použije, když inicializujete gettext ve svém zdrojovém kódu.