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 simple ?


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Par défaut Internationalisation simple ?
    Bonjour, voila j'ai fait plusieurs recherche sur des technique d'internationalisation et je doit avoué avoir été déçu par ce que j'ai trouvé, des code probablement très efficase, mais ce n'est pas exactement ce que je cherche, en fait, je cherchais tout simplement une méthode ou le fichier de traduction est le plus léger possible (quelquechose ressemblant a un .ini serait idéal) le probleme c'est que je ne suit pas sur comment créé moi meme ce genre de fonction. j'avais trouvé gettext, mais je n'ai pas aimé le fait qu'il faut "compiler" le fichier de langue, j'aimerais que ce fichier soit tres facilement modifiable

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tu peux faire un truc comme ça, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <fstream>
    #include <string>
    #include <map>
    #include <boost/algorithm/string/trim.hpp>
     
    struct trans_loader
    {
        trans_loader()
        {
             std::ifstream f("file.lang");
     
             while(f)
             {         
                std::string key;
                std::getline(f, key, '=');
                boost::trim(key);
     
                std::string value;
                std::getline(f, value);
                boost::trim(value);
     
                data[key] = value;
            }
        }
     
        const char* operator[](const char* s)
        {
            return data[s].c_str();
        }
     
    private:
        std::map<std::string, std::string> data;
    };
     
    inline const char* translate(const char* s)
    {
        static trans_loader l;
        return l[s];
    }
    puis dans file.lang tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foo = truc machin
    bar = bidule
    et voilà.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Par défaut
    Merci beaucoup, c'est exactement ce que je cherchais, par contre j'ai eu quelque probleme a utiliser cette fonction, si c'est possible d'avoir un tres bref exemple d'utilisation ce serait d'une grande aide, merci !

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    bah, c'est évident

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main()
    {
        std::cout << translate("foo") << std::endl;
    }
    affiche truc machin

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 61
    Par défaut
    merci énormément ! sa marche tres bien, et désolé pour cette question stupide pour l'exemple, sa fait longtemp j'ai pas fait de programmation, et j'en ai perdu pas mal, sa ne m'as pas paru évident dutout, et pourtan j'avais fait quelques essai avec ce que j'en ai déduit du code, enfin... je vais aller relire mes base moi

    sinon, et juste une réponse sur si c'est possible ferait l'affaire, je me demandais s'il y a moyen d'alégé le code d'utilisation, la raison est que je planifie danns certain cas, utiliser la traduction mot par mot, donc sa fait beaucoup... j'ai deja quelques idée en tete, juste une réponse sur si je devrais oublier ca ou si sa vaut la peine que je travaille ladessu serait tres aprécié (idéalement une sorte d'utilisation en variable serait idéal, je ne crois pas pouvoir faire plus court comme code)


    edit: j'ai deja fait quelques test, voici ma "modification"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        string foo = translate("foo");
        std::cout << foo << std::endl;
    okay c'est un peut evident mais je vais me baser ladessu pour faire une fonction qui sera chargé de créé les variable et les assigné a leur traduction, j'espere que sa donnera un bon résultat !

  6. #6
    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
    J'ai du mal à voir comment une traduction mot par mot pourrait marcher. La phrase me semble l'entité minimale sur laquelle une traduction a un sens.

    Après, un point souvent utile est de traduire une phrase à trous "Le fichier ###trou1### n'a pas été trouvé dans le répertoire ###trou2###".
    Si tel est le cas, il est souvent utile d'avoir des trou que tu puisse mettre dans un ordre différent entre deux langues différentes. Mais ça complexifie légèrement le système. Je peux donne quelques pistes si tu es intéressé pour aller vers ça.
    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.

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    avec boost::format, ça se fait très très bien les phrases à trous.

    Après, avec un système ultra-simple comme celui de loufoque, tu auras un problème si la phrase source contient des =. A toi de faire en sorte que ce ne soit pas le cas (tu peux par contre en mettre dans la destination). De même, les valeurs ne sont pas multilignes, ça peut être un soucis comme ne pas l'être

  8. #8
    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
    Bonjour,
    Dans les applications où j'ai été amené à travailler, les chaînes étaient traduites globalement : au niveau de la phrase ou du paragraphe. Jamais de traduction à la volée au mot à mot. Pour les phrases à 'trous', les trous ne concernaient que des ressources non linguistique : nom de fichier, valeur numérique. Si une phrase doit exister en différentes versions (singulier/pluriel, masculin/féminin), alors ce sont des ressources différentes à chaque fois et non l'ajout d'un éventuel 's' par le programme.
    Sinon, cela devient tout de suite un casse-tête sans nom de gérer la syntaxe appropriée à chaque langue.

  9. #9
    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 white_tentacle Voir le message
    avec boost::format, ça se fait très très bien les phrases à trous.
    C'est effectivement ce que j'avais en tête.
    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.

Discussions similaires

  1. Effet de transition simple entre 2 images
    Par ChrisFAPS dans le forum Flash
    Réponses: 2
    Dernier message: 18/04/2003, 12h41
  2. Bon je vais essayer d'être simple :
    Par fpouget dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/04/2003, 17h46
  3. Edition d'un simple fichier java
    Par mcrepin dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 21/03/2003, 14h28
  4. [CR] internationalisation d'un report
    Par osoudee dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 24/06/2002, 16h54
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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