IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Internationalisation, gettext et std::local


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut Internationalisation, gettext et std::local
    Bon, je repose ma question puisqu�elle a l�air d�avoir pris un coup de froid :
    Je souhaite internationaliser mon application, et plus sp�cifiquement g�rer des messages textes dans diff�rentes langues. J�ai un peu explor� le net pour voir les solutions qui pouvaient s�offrir � moi, et j�ai trouv� deux pistes :
    gettext est une librairie permettant de g�rer des catalogues de textes multi-langues. Cependant cette solution ne me plait pas pour deux raisons majeurs :
    Par d�faut, les cha�nes de caract�res doivent �tre en anglais et sont utilis�es telles qu�elles apparaissent dans le code comme identifiant du catalogue. On peut, mais c�est plus compliqu�, les g�r�s par du fran�ais.
    Du coup, ma seconde raison tient essentiellement � ce que je ne souhaite pas positionner les cha�nes dans le code (exceptions faites d�un fichier �ressource� associ�). En effet, les cha�nes ne sont pas produite par le d�veloppeur ni pour le fran�ais, ni pour les traductions.
    L�autre solution serait std ::local. Le hic, c�est que je n�arrive � trouver aucune doc l�-dessus, et sp�cifiquement sur le format des fichiers catalogues associ�s. La doc dit que seul l�interface std ::local est sp�cifi�e (jusque l�, c�est normale), et que l�impl�mentation est laiss�e � la charge du compilo. D�o�, pas d�info sur le format des fichiers�.
    Donc ma question est quelqu�un conna�trait-il une biblioth�que permettant de g�rer des messages textes issus de plusieurs catalogues (� l�instar des LoadString des ressources windows), avec bien s�r la contrainte d��tre � peu pr�s libre et multi plateforme.
    Merci.

  2. #2
    Membre �m�rite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par d�faut
    1er question, ton appli a t'elle une GUI. Si oui il est fort probable que la biblio utilis�e pour faire la GUI poss�de un m�canisme de gestion des catalogues qu'il serait dommage de ne pas utiliser.

    Sinon, il n'y a rien en standard dans le C++ qui puisse faire cela. std::local n'a pas de gestion de catalogues, elle sert juste � changer le comportement des fonctions standards, comme le formatage des nombres "1.2" en anglais, "1,2" en fran�ais, ...

    Mais gettext me semble plus puissant que tu semble le croire. Il peut s'utiliser de la m�me fa�on que LoadString, par exemple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::cout << _("MESSAGE1");
    avec ensuite un fichier .po pour l'anglais contenant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    msgid "MESSAGE1"
    msgstr "Hello, World!"
    et un fichier .po pour le fran�ais contenant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    msgid "MESSAGE1"
    msgstr "Bonjour tout le monde !"

  3. #3
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par JolyLoic Voir le message
    Pour ma part, je pr�f�re avoir des cha�nes qui ont du sens plut�t que des ids :
    En fait, l'interface est faite pour l'utilisateur et pas le programmeur, donc moi je suis plus partisan d'avoir des IDs dans le code et des cha�nes dans un fichier d�di�. D'ailleurs, dans les diff�rentes missions que j'ai pu effectu�es, ces libell�s sont fix�s par des �quipes ext�rieures au dev (car un d�veloppeur fait des interfaces... de d�veloppeurs).


    Citation Envoy� par Sylvain Togni Voir le message
    1er question, ton appli a t'elle une GUI. Si oui il est fort probable que la biblio utilis�e pour faire la GUI poss�de un m�canisme de gestion des catalogues qu'il serait dommage de ne pas utiliser.
    Oui, mais non ... Enfin presque. J'utilise wxWidget et ils se basent sur gettext.

    Citation Envoy� par Sylvain Togni Voir le message
    Sinon, il n'y a rien en standard dans le C++ qui puisse faire cela. std::local n'a pas de gestion de catalogues, elle sert juste � changer le comportement des fonctions standards, comme le formatage des nombres "1.2" en anglais, "1,2" en fran�ais, ...
    En fait, j'ai trouv� dans la doc sur std::local, la facette std::message qui normalement permet de g�rer des catalogues. Mais je n'arrive pas � avoir d'info plus pr�cise.

    Citation Envoy� par Sylvain Togni Voir le message
    Mais gettext me semble plus puissant que tu semble le croire. Il peut s'utiliser de la m�me fa�on que LoadString, par exemple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::cout << _("MESSAGE1");
    avec ensuite un fichier .po pour l'anglais contenant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    msgid "MESSAGE1"
    msgstr "Hello, World!"
    et un fichier .po pour le fran�ais contenant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    msgid "MESSAGE1"
    msgstr "Bonjour tout le monde !"
    C'est un peu l'impression que j'avais. Cependant, il y a un m�canisme que je n'arrive pas � saisir. J'ai cru comprendre que par d�faut les chaines �tant dans une langue donn�e (mettons l'anglais) et qu'ensuite on fournissait des catalogues (.po/.mo) pour chacune des autres langues. Donc, ma question, si je configure mon appli en anglais, prend-il les cha�nes dans le code ou charge-t-il un catalogue anglais?

  4. #4
    Membre �m�rite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par d�faut
    Citation Envoy� par 3DArchi Voir le message
    J'ai cru comprendre que par d�faut les chaines �tant dans une langue donn�e (mettons l'anglais) et qu'ensuite on fournissait des catalogues (.po/.mo) pour chacune des autres langues. Donc, ma question, si je configure mon appli en anglais, prend-il les cha�nes dans le code ou charge-t-il un catalogue anglais?
    gettext charge le catalogue demand�. Si il ne le trouve pas, il utilise les chaines dans le code. Il ne traite pas l'anglais plus sp�cifiquement qu'une autre langue.

  5. #5
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par 3DArchi Voir le message
    En fait, l'interface est faite pour l'utilisateur et pas le programmeur, donc moi je suis plus partisan d'avoir des IDs dans le code et des cha�nes dans un fichier d�di�. D'ailleurs, dans les diff�rentes missions que j'ai pu effectu�es, ces libell�s sont fix�s par des �quipes ext�rieures au dev (car un d�veloppeur fait des interfaces... de d�veloppeurs).
    Je n'ai jamais dit le contraire. J'ai juste dit que je pr�f�rais que ces IDs soient des choses qui aient du sens pour le d�veloppeur, plus qu'un num�ro imbittable. Dans mon exemple, rien n'emp�che qu'il y ait une traduction langue de dev => anglais :
    "Error: file %0% not found in folder %1%" => "Error: the file %0% can not be found in folder '%1%'"

    Avoue que dans ce cas, une inversion des %1% et %0% a moins de chance de se produire, c�t� code ou c�t� traducteur, que si l'ID �tait u simple num�ro, non ?
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  6. #6
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par JolyLoic Voir le message
    Je n'ai jamais dit le contraire. J'ai juste dit que je pr�f�rais que ces IDs soient des choses qui aient du sens pour le d�veloppeur, plus qu'un num�ro imbittable. Dans mon exemple, rien n'emp�che qu'il y ait une traduction langue de dev => anglais :
    "Error: file %0% not found in folder %1%" => "Error: the file %0% can not be found in folder '%1%'"

    Avoue que dans ce cas, une inversion des %1% et %0% a moins de chance de se produire, c�t� code ou c�t� traducteur, que si l'ID �tait u simple num�ro, non ?
    J'ai peur qu'on parte sur un troll

    Merci pour les infos sur gettext.
    Donc, je vais partir avec gettext (esp�rons que dans deux mois, je ne regrette pas ce choix...)
    Par contre, j'ai t�l�charg� gettext, et l� Je ne sais m�me par par o� commencer pour g�n�rer les outils pour Windows, quelle proc�dure suivre pour l'utiliser, etc... Savez-vous o� je peux trouver de la doc (dans l'id�al en fran�ais), l� dessus, et sp�cialement pour des plateformes de dev en windows?

  7. #7
    Membre �m�rite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par d�faut
    En fait avec wxWidgets c'est tr�s simple tu n'a m�me pas besoin d'utiliser directement gettext.

    1) Tu enveloppe toutes les chaine � localiser par _("...") dans le code
    2) Tu utilise poEdit, c'est un logiciel qui extrait toutes les chaines automatiquement, offre une interface pour les traduire et compile les fichiers catalogues .mo
    3) Dans ton wxApp tu rajoute un membre wxLocale puis dans la fonction OnInit()
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    myLocale.Init(wxLANGUAGE_DEFAULT, 0); // par exemple, pour charger le catalogue correspondant à la langue de l'OS
    myLocale.AddCatalog(_T("wx")); // catalogue des chaines wxWidgets
    myLocale.AddCatalog(GetAppName()); // catalogue de l'application
    4) Et enfin tu place les fichiers catalogues wx.mo et <app-name>.mo dans le r�pertoire correspondant � la langue, par exemple dans "fr" pour le fran�ais, � c�t� de l'ex�cutable.

  8. #8
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par 3DArchi Voir le message
    Du coup, ma seconde raison tient essentiellement � ce que je ne souhaite pas positionner les cha�nes dans le code (exceptions faites d�un fichier �ressource� associ�). En effet, les cha�nes ne sont pas produite par le d�veloppeur ni pour le fran�ais, ni pour les traductions.
    Pour ma part, je pr�f�re avoir des cha�nes qui ont du sens plut�t que des ids :
    - D�j�, en mode d�grad�, quand des ressources manquent, l'utilisateur se retrouve quand m�me � pouvoir � peu pr�s utiliser le programme
    - Surtout, �a rend le code plus compr�hensible pour le d�veloppeur, qui pr�f�rera probablement �crire (et relire) un truc genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    cout << format(_("Error: file %0% not found in folder %1%") % fileName % filePath));
    Que
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    cout << format(_("ID1425") % fileName % filePath));
    Apr�s on est d'accord que le langage utilis� par le d�veloppeur n'est ni l'anglais, ni le fran�ais, mais un langage interne compr�hensible par lui.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 06/12/2013, 09h12
  2. gettext I18n et locale
    Par zevince dans le forum Langage
    R�ponses: 0
    Dernier message: 16/11/2011, 22h08
  3. Support Gettext pour l'internationalisation
    Par Franck.H dans le forum GTK+ avec C & C++
    R�ponses: 16
    Dernier message: 22/07/2007, 18h15
  4. [Internationalisation] Local ID
    Par Neilos dans le forum C++Builder
    R�ponses: 2
    Dernier message: 28/06/2005, 08h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo