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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 50
    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.

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