Internationalisation des applications logicielles sous linux

Internationalisation des applications logicielles sous linux

Messagepar JPL » 22 Février 2012, 13:00

Voici un tuto intéressant : http://forum.ubuntu-fr.org/viewtopic.php?id=174857
Dans ce qui suit il faut bien entendu remplacer helloworld par un autre nom. (Le nom de votre projet par exemple.)

#8 Le 20/08/2008, à 22:29

zedtux

En effet je me dis qu'il est possible aussi que ce lien meurt, alors je vais faire un poste rapide.

Mais pour bien comprendre tout ce qui se passe JE VOUS RECOMMANDE VIVEMENT DE LIRE LA DOC DE MON LIEN !!

Pour commencer, il faut inclure les dépendances pour l'internationalisation ( avoir la paquet gettext installé donc.):

Code: Tout sélectionner
//~ Internationalization Dependances
#include <libintl.h>
#include <locale.h>

//~ For lazy developers only ;)
#define _(STRING)            gettext(STRING)


( La dernière ligne permet d'alléger le code. )

Ces inclusions sont donc à faire dans votre fichier main.cpp... Enfin celui qui contient votre int main( int argc, char * argv[] ).

Par la suite, il faut instancier GetText :

Code: Tout sélectionner
    //~
    //~ Internationalization Initialization
    //~
   
    //~ i18n: initializes the entire current locale of the program as per environment variables set by the user
    setlocale( LC_ALL, "" );
   
    //~ i18n: Indicate the path of the i18n catalog file
    bindtextdomain( "helloworld", "/usr/share/locale" );
   
    //~ i18n: sets the message domain
    textdomain( "helloworld" );


Ces lignes vont appeler le catalogue de traduction dans /usr/share/locale, et appeler la section helloworld de ce catalogue.

Maintenant, il ne reste plus qu'a mettre vos messages !
Moi par exemple, j'ai codé mon soft en Anglais ( je ne pensais pas à gettext au début. ). Mais je vous conseile donc d'utiliser votre langue maternelle du coup.

Donc par exemple, en C++, on va mettre :
Code: Tout sélectionner
cout << gettext( "Little GetText test!" ) << endl << endl;


En C :

Code: Tout sélectionner
printf( gettext( "Little GetText test!\n" ) );


A faire donc dans tout le code.


Maintenant, imagions que vous avez tout fait, il reste la dernière étape: Créer le catalogue de traduction !

Pour ce faire, Gettext a installé xgettext. Ce petit programme parcourt les fichiers que vous lui indiquez à la recherche de vos lignes de texte pour les inclure dans le catalogue, tout seul comme un grand !
( Ouf ! Moi qui suis feignant... j'aime cet outil ! )

Donc, pour créer le catalogue pour tout votre projet :

Code: Tout sélectionner
xgettext -d cat_helloworld -s -o helloworld.pot ./*.cpp


- cat_helloworld est la référence. Si par exemple vous voulez créer plusieurs sections dans le catalogue, pour chaque fichiers, il faut préciser ici le nom de la catégorie.
- helloworld.pot correspond au fichier de catalogue non compilé.
- -s range dans l'ordre alphabétique les traductions...
- ./*.cpp permet de parcourir tout les fichiers .cpp de votre projet à la recherche de chaînes gettext.

Ensuite, il faut préparer le fichier avec la commande :

Code: Tout sélectionner
msginit -l fr -o french.po -i helloworld.pot


- -l fr précise que le catalogue est français.
- -o french.po indique le nom du fichier de sortie
- -i tuXtremSplit.pot indique le fichier de catalogue à utiliser.

Cette commande vous demandera quel adresse email les traducteurs peuvent utiliser pour vous contacter.

Maintenant il ne reste plus qu'a modifier le fichier pour ajouter les traductions.
( Dans mon cas, de Anglais à Français. )

Une fois terminé, et sauvegardé, il ne reste plus qu'à compiler le catalogue :

Code: Tout sélectionner
msgfmt -c -v -o helloworld.mo french.po


- -c vérifie le format de fichier .po
- -v passe le programme en mode verbose pour voire ce qui se passe.
- -o helloworld.mo indique le nom du fichier de sortie

Et voila !
Maintenant on copie le fichier au bon endroit :
Code: Tout sélectionner
sudo cp helloworld.mo /usr/share/locale/fr/LC_MESSAGES


Remplacer le fr dans le chemin par la langue correspondant.

Maintenant, si vous lancez le programme, vous devez avoir les chaînes traduite ! ;)
Dernière édition par JPL le 25 Février 2012, 18:13, édité 1 fois au total.
Raison: Internationalisatiion sous linux !
JPL Administrateur
Avatar de l’utilisateur
JPL
Administrateur
 
Messages: 59
Inscrit le: 19 Février 2010, 17:22

Retour vers Discussions sur les outils de la compilation

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron