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

Qt Discussion :

Utilisation de Qt Translator


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut Utilisation de Qt Translator
    Bonjour,
    je veux utiliser la classe QTranslator dans mon application.
    Avant de me lancer sur ce coup, je veux m'informer sur un détail.
    Je vais créé les fichier .ts et puis les translater par Qt Linguist, reste à inclure les fichiers .ts dans mon code.
    Selon les tuto, pour utiliser QTranslator, j'ai trouvé cet 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
     
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
     
        QTranslator translator;
        translator.load("myclass_en");
        app.installTranslator(&translator);
     
        FenPrincipale fenetre;
        fenetre.show();
     
        return app.exec();
    }
    Sauf que je veux créer des slots afin de changer la langue lorsque l'utilisateur clique sur le bouton de langue respective .

    voici le code du slot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void changeToEng()
    {
       translator.load("myclass_en");
      //app.installTranslator(&translator);
    }
    app.installTranslator(&translator); comment faire pour changer ceci??, installTranslator(&translator); fonctionne??

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 661
    Points : 188 667
    Points
    188 667
    Par défaut
    Salut,

    Il faut recréer un QTranslator avec la nouvelle langue, puis charger le bon fichier dedans, le réinstaller, puis retraduire toute la GUI.

    Pour plus de détails, cette session d'Ikipou : http://qt.developpez.tv/2009-devdays...pplications-qt (c'est discuté dedans, avec plein d'autres choses, mais vers la fin, Going Further).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Salut,

    Il faut recréer un QTranslator avec la nouvelle langue, puis charger le bon fichier dedans, le réinstaller, puis retraduire toute la GUI.

    Pour plus de détails, cette session d'Ikipou : http://qt.developpez.tv/2009-devdays...pplications-qt (c'est discuté dedans, avec plein d'autres choses, mais vers la fin, Going Further).
    Merci pour votre réponse,
    l'exemple montré à la 52ème minute est différent de ce que je cherche!
    je cherche toujours la solution

    J'ai déclarer la viariable app comme étant global,
    mais lorsque je change la langue, le fichier .qm n'est pas chargé... :/

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Je ne sais pas si ça peut t'aider et si tu avais lu, mais dourouc05 a traduit un Qt Quaterly sur ce sujet : http://qt-quarterly.developpez.com/q...-chef-suedois/

    Il y a également un Qt Quarterly plus récent : http://qt-quarterly.developpez.com/q...ion-dynamique/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    J'ai pas encore résolu le problème!
    j'ai tenté cette méthode:
    j'ai déclaré une variable globale dans ma classe, voici le code:
    class.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    public:
        static QApplication* application;
    class.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QApplication* class::application;
    ...
    void class::changeToFr()
    {
        translator.load("class_fr");
        application->installTranslator(&translator);
    }
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char *argv[])
    {
        Q_INIT_RESOURCE(ressources);
        QApplication app(argc, argv);
        class classApp;
        classApp.application= &app;
        classApp.showMaximized();
        return app.exec();
    }
    sauf que rien ne se passe lorsque je lance le slot "changeToFr()"!

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 661
    Points : 188 667
    Points
    188 667
    Par défaut
    Tu as juste chargé la traduction, maintenant il faut retraduire toute la fenêtre, voir dans la vidéo c'est expliqué.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Note qu'il est inutile de déclarer la QApplication comme étant globale, Qt le fait déjà (qApp).

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Tu as juste chargé la traduction, maintenant il faut retraduire toute la fenêtre, voir dans la vidéo c'est expliqué.
    je ne comprends pas! Mais, c'est cette commande qui charge la traduction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    application->installTranslator(&translator);
    Sinon, A quelle minute exactement il explique ceci?!!


    Citation Envoyé par spidermario Voir le message
    Note qu'il est inutile de déclarer la QApplication comme étant globale, Qt le fait déjà (qApp).
    Tu peux expliquer d'avantage SVP!
    Je peux appeler la variable "app", dans la classe "class" sans faire référence à celle du main, et le compilateur comprends que c'est la même variable? je me trompe?

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 661
    Points : 188 667
    Points
    188 667
    Par défaut
    Oui, cette commande charge la traduction. Tes strings sont en mémoire. Pas à l'écran avant que QtGui vienne toquer à la porte et demander gentiment au gardien la variable qui l'intéresse à ce moment. Or, tu changes juste les habitants de la petite maison, mais QtGui n'en sait rien, et comme il connaît déjà la réponse, il ne va pas la demander. Il faut le lui préciser.

    Dans la doc : http://qt.developpez.com/doc/latest/...ic-translation

  10. #10
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par Monta^^ Voir le message
    Tu peux expliquer d'avantage SVP!
    Je peux appeler la variable "app", dans la classe "class" sans faire référence à celle du main, et le compilateur comprends que c'est la même variable? je me trompe?
    Eh bien, en gros, tu n'as pas besoin de déclarer toi-même une QApplication* globale, puisque Qt en déclare déjà une qui s'appelle qApp.

    C'est-à-dire que si tu fais, dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QApplication application(argc, argv);
    Alors, à partir de ce moment, et à tout endroit du code, la variable globale qApp est un pointeur sur “application”.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par spidermario Voir le message
    Alors, à partir de ce moment, et à tout endroit du code, la variable globale qApp est un pointeur sur “application”.
    Merci!

    Citation Envoyé par dourouc05 Voir le message
    Je ne sais pas comment manipuler les QEvent!
    l'exemple mentionné dans le lien est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     void MyWidget::changeEvent(QEvent *event)
     {
         if (e->type() == QEvent::LanguageChange) {
             titleLabel->setText(tr("Document Title"));
             ...
             okPushButton->setText(tr("&OK"));
         } else
             QWidget::changeEvent(event);
     }
    ce que j'ai tenté, j'ai ajouté une fonction changeEvent:

    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
    
    void SmellPhone::changeEvent(QEvent *event)
    {
        if (event->type() == QEvent::LanguageChange) {
    
       qApp->installTranslator(&translator);
    
        } else
            QWidget::changeEvent(event);
    }
    .....
    void changeToEng()
    {
       translator.load("myclass_en");
    // qApp.installTranslator(&translator);
    }
    comment j'utilise changeEvent?! je suis perdu la!

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut
    après une recherche, j'ai compris que je dois ajouter ceci a mon code:
    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
     
    void class::changeEvent(QEvent *event) {
        if (event->type() == QEvent::LanguageChange) {
            retranslateInterface();
        }
        QWidget::changeEvent(event);
    }
    .........
     
    void class::retranslateInterface() {
     
     
        QString lang = ":/ressources/langue/class_"+langue;
     
     
        if ( translator )
            qApp->removeTranslator( translator );
     
     
        translator->load(lang);
        qApp->installTranslator( translator );
    }
    ...........
    void class::changeToFr()
    {
        QString langue="fr";
        QEvent *translate = new QEvent(QEvent::LanguageChange);
        changeEvent(translate);
    }
    l'interface ne change pas de langue lorsque je lance le slot: changeToFr() ..!
    Bizarre!

  13. #13
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 661
    Points : 188 667
    Points
    188 667
    Par défaut
    Quelques remarques :

    Tu charges le fichier depuis les ressources, ta traduction y réside-t-elle ?
    Ta variable QString langue vit tant que l'appel de changeToFr() vit, c'est-à-dire jusqu'à ce que l'évènement soit lancé. Ensuite, elle n'existe tout simplement plus, et elle n'a jamais été passée en paramètre, elle est donc perdue.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Quelques remarques :

    Tu charges le fichier depuis les ressources, ta traduction y réside-t-elle ?
    Ta variable QString langue vit tant que l'appel de changeToFr() vit, c'est-à-dire jusqu'à ce que l'évènement soit lancé. Ensuite, elle n'existe tout simplement plus, et elle n'a jamais été passée en paramètre, elle est donc perdue.
    1/ J'ai vérifié que mes fichiers se situent bien dans le dossier ressources/langue,
    je les ai même mis directement près dans le dossier de l'exécutable..en vin!
    2/ J'ai mis la variable QString langue en tant que membre de la classe pour etre sur de sa visibilité...
    Mais toujours le même problème, la langue ne change pas dans le l'interface graphique!

  15. #15
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 661
    Points : 188 667
    Points
    188 667
    Par défaut
    En passant sur le site, j'ai aussi trouvé ceci : http://qt-quarterly.developpez.com/q...ion-dynamique/. Cela pourrait t'intéresser.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    En passant sur le site, j'ai aussi trouvé ceci : http://qt-quarterly.developpez.com/q...ion-dynamique/. Cela pourrait t'intéresser.
    Ce lien explique autre chose, différente de ce que je cherche!
    Et il est temps de trouver une solution!
    Lorsque je fais un appel ordinaire de mon QTranslator dans le main de mon projet, il fonctionne correctement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QTranslator trans;
    trans.load("maclass_de");
    app.installTranslator(&trans);
    Sauf que l'appel dynamique du QTransaltor dans ma classe ne marche toujours pas! voici ce que j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void class::changeEvent(QEvent *event) {
        if (event->type() == QEvent::LanguageChange) {
            retranslateInterface();
        }
        QWidget::changeEvent(event);
    }
    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
     
     
    void class::retranslateInterface() {
     
     
        QString lang = ":/ressources/langue/class_"+langue;
     
     
        if ( translator )
            qApp->removeTranslator( translator );
     
     
        translator->load(lang);
        qApp->installTranslator( translator );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void class::changeToFr()
    {
        QString langue="fr";
        QEvent *translate = new QEvent(QEvent::LanguageChange);
        changeEvent(translate);
    }

Discussions similaires

  1. [VxiR2] Problème export vers WebI, utilisation de translate/replace
    Par clementp dans le forum Deski
    Réponses: 1
    Dernier message: 26/11/2010, 16h57
  2. Utiliser Google Translate
    Par rambc dans le forum Général Python
    Réponses: 0
    Dernier message: 11/10/2010, 23h56
  3. Réponses: 1
    Dernier message: 01/07/2009, 17h41
  4. Utilisation de translate (?)
    Par LEK dans le forum SQL
    Réponses: 6
    Dernier message: 17/04/2007, 15h04
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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