Préparation du projet

Dans les directives ci-dessous, nous supposons que vous n'utilisez pas gettext directement, mais intltool qui a été spécialement écrit pour GNOME. intltool utilise gettext() pour extraire les chaînes du code source, mais intltool peut aussi combiner, dans les fichiers standards .pot/.po de gettext, les chaînes provenant d'autres fichiers : par exemple, des détails de menu du bureau ou de ressources d'interface utilisateur comme les fichiers Glade.

Nous supposons également que vous utilisez autotools (c'est-à-dire, automake et autoconf) pour construire le projet et que vous vous servez de ./autogen.sh de gnome-common, qui, entre autres choses, effectue certaines initialisations pour intltool.

Créez un sous-répertoire nommé po dans le répertoire racine de votre projet. Ce répertoire contiendra en phase finale toutes les traductions. Dans celui-ci, créez un fichier nommé LINGUAS et un fichier nommé POTFILES.in. Il est aussi de pratique courante de créer un fichier ChangeLog dans le répertoire po pour que les traducteurs puissent garder trace des modifications de traduction.

LINGUAS contient une liste triée alphabétiquement des codes identifiant toutes les langues dans lesquelles votre programme est traduit (les lignes de commentaires débutant par # sont ignorées). Chaque code de langue listé dans LINGUAS doit avoir un fichier .po correspondant. Ainsi, si votre programme a des traductions en allemand et en japonais, le fichier LINGUAS ressemblera à :

# keep this file sorted alphabetically, one language code per line
de
ja

(en outre, vous devez avoir dans le dossier po des fichiers ja.po et de.po contenant respectivement la traduction japonaise et allemande).

POTFILES.in est une liste des chemins vers tous les fichiers contenant des chaînes marquées pour la traduction, à partir du répertoire racine du projet. Ainsi, par exemple, si les sources du projet sont situées dans un sous-répertoire nommé src et si vous avez deux fichiers contenant des chaînes à traduire, votre fichier POTFILES.in ressemble à quelque chose comme :

src/main.cc
src/other.cc

Si vous utilisez gettext directement, vous ne pouvez marquer pour traduction que les chaînes situées dans les fichiers de code source. Mais, si vous vous servez de intltool, vous pouvez marquer des chaînes pour traduction dans divers autres formats de fichier, y compris les fichiers d'interface utilisateur Glade, xml, .desktop et de nombreux autres. Donc si vous avez conçu une partie des interfaces utilisateur du projet à l'aide de Glade, ajoutez également vos fichiers .glade dans la liste du fichier POTFILES.in.

Maintenant que vous disposez d'un endroit où mettre vos traductions, il est nécessaire d'initialiser intltool et gettext. Ajoutez le code ci-après dans votre fichier configure.ac, en mettant le nom de votre programme à la place de « nom_programme » :

IT_PROG_INTLTOOL([0.35.0])

GETTEXT_PACKAGE=nom_programme
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
                   [Domaine de portée de gettext])
AM_GLIB_GNU_GETTEXT

PROGRAMNAME_LOCALEDIR=[${datadir}/locale]
AC_SUBST(PROGRAMNAME_LOCALEDIR)

La variable PROGRAMNAME_LOCALEDIR sera utilisée plus tard dans le fichier Makefile.am pour définir une macro utilisée quand vous initialisez gettext dans votre code source.

Dans le fichier Makefile.am principal :

  • ajoutez po à la variable SUBDIRS. Sans cela, vos traductions ne seraient pas construites et installées lors de la construction du programme.
  • définissez INTLTOOL_FILES égal à :
    INTLTOOL_FILES = intltool-extract.in \
                     intltool-merge.in \
                     intltool-update.in
  • ajoutez INTLTOOL_FILES à la liste EXTRA_DIST de fichiers. Ceci assure que ces commandes seront incluses dans l'archive source quand vous effectuerez make dist.
  • mettez à jour vos DISTCLEANFILES :
    DISTCLEANFILES = ... intltool-extract \
                     intltool-merge \
                     intltool-update \
                     po/.intltool-merge-cache

Dans votre src/Makefile.am, mettez à jour votre variable AM_CPPFLAGS en ajoutant la définition de macro préprocesseur suivante :

AM_CPPFLAGS = ... -DPROGRAMNAME_LOCALEDIR=\"${PROGRAMNAME_LOCALEDIR}\"

Cette macro sert quand vous initialisez gettext dans votre code source.