Contents Up Previous Next

Internationalisation

Bien que l'internationalisation d'une application (i18n pour faire plus court) implique plus que simplement traduire ses messages textes en un autre format de message,- les dates et heures, ainsi que les formats courants ton également besoin d'être changés, certaines langues s'écrivent de droite à gauche, l'encodage des caractères peut être différent et d'autres choses peuvent avoir besoin d'être modifiées - il s'agit quand même d'un premier pas nécessaire. wxWidgets fournit des facilités pour la traduction des messages avec sa classe wxLocale et est elle-même complètmeent traduite dans différentes langues. Merci de consulter la page d'accueil wxWidgets pour la dernière mise à jour des traductions - et si vous faites une traduction dans une langue qui n'est pas encore publiée, elle sera acceptée avec reconnaissance pour être inclue dans les versions fuures de la bibliothèque!

L'approche wxWidgets à i18n suit le package GNu gettext. wxWidgets utilise les catalogues de messages compatibles binairement avec les catalogues gettext et cela permet d'utiliser tous les programmes de ce package. Notez qu'aucune bibliothèque additionnelle n'est nécessaire au moment de l'exécution, vous avez seulement les catalogues de messages à distribuer et rien d'autre.

Durant le développement du programme, vous aurez besoin du package gettext pour travailler avec les catalogues de messages. Avertissement: les versions < 0.10 de gettext sont réputées pourêtre bugguées, vous devriez donc trouver une des dernière version!

Il y a deux sortes de catalogues de messages : les catalogues sources qui sont des fichiers textes avec l'extension .po, et les catalogues binaires, qui sont créés depuis les précédents avec le programme msgfmt (faisant partie du package gettext) et ont l'extension .mo. Seuls les fichiers binaires sont nécessaires durant l'exécution du programme.

Le programme i18n implique plusieurs étapes:

  1. Traduction des chaines de caractères dans le programme en utilisant wxGetTranslation ou de façon équivalente, la macro _().
  2. Extraire les chaines de caractères à traduire depuis le programme : en partant du travail effectué à l'étape précédente car le programme xgettext utilisé pour l'extraction des chaînes de caractères reconnait le standard _() aussi bien que (en utilisant l'option -k) notre wxGetTranslation et extrait toutes les chaines à l'intérieur des appels à ces fonctions. Vous pouvez également utiliser l'option -a pour extraire toutes les chaines, mais cela va généralement résulter en une liste de chaines qui n'auront pas besoin d'être traduites. Cela va créer un catalogue de messages - un fichier .po.
  3. Traduire les chaines extraites à l'étape précédente dans d'autres langues. Cela se résume à éditer le fichier .po.
  4. Compiler le fichier .po en fichier .mo pour qu'il soit utilisé par le programme.
  5. Installer les fichiers .mo avec votre application à l'emplacement approprié pour le système destination qui est retourné parwxStandardPaths::GetLocalizedResourcesDir(wxStandardPaths::ResourceCat_Messages). Si les catalogues de messages ne sont pas installés dans cet emplacement par défaut, vous pouvez explicitement utiliser AddCatalogLookupPathPrefix() pour malgré tout permettre à wxWidgets de les trouver mais il est fortement recommendé d'utiliser le répertoire par défaut.
  6. Définir la "locale" appropriée dans votre programme pour utiliser les chaines pour une langue donnée: voir wxLocale.

Voir également la documentation de GNU gettext.

Voir aussi Ecrire des applications non-anglaises. Cet article se concentre sur les problèmes relatifs à la manipulation des jeux de caractères.

Finalement, jetez un coup d'oeil à l'exemple i18n qui vous montre à quoi cela ressemble dans la pratique.

Traduire les accélérateurs de menus

Si vous traduisez les noms des modificateurs de raccourcis (Ctrl, Alt et Shift) dans vos étiquettes de menus, vous pouvez trouver des accélérateurs qui ne fonctionneront plus. Dans vos catalogues de messages, vous devrez fournir des traductions individuelles de ces modificateurs à partir de leur noms en miniscules (ctrl, alt, shist) afin que le code des accélérateurs wxWidgets puisse les reconnaitre même après leur traduction. wxWidgets ne fourni actuellement pas de traduction pour tous. wxWidgets ne gère pas encore les noms de touches spéciales tels que Backspace, End, Insert, etc.