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 Quick Discussion :

La traduction d'interfaces QML


Sujet :

Qt Quick

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : novembre 2010
    Messages : 10
    Points : 348
    Points
    348
    Par défaut La traduction d'interfaces QML
    Le but de cet article est de tester l'internationalisation des applications QML.
    On s'appuie sur la documentation de Qt, « QML Internationalization ».

    La traduction d'interfaces QML

  2. #2
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 600
    Points : 3 578
    Points
    3 578
    Par défaut
    Article très intéressant mais il manque quelque chose de très important. Comment prendre en compte les fichiers de traduction lorsqu'on n'utilise pas QML Viewer ? En pratique on ne lance pas son programme avec QML Viewer et la méthode traditionnelle de Qt semble ne pas marcher.
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

  3. #3
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2009
    Messages : 1 840
    Points : 5 394
    Points
    5 394
    Par défaut
    Citation Envoyé par air-dex Voir le message
    Article très intéressant mais il manque quelque chose de très important. Comment prendre en compte les fichiers de traduction lorsqu'on n'utilise pas QML Viewer ? En pratique on ne lance pas son programme avec QML Viewer et la méthode traditionnelle de Qt semble ne pas marcher.
    La méthode exposée dans l'article est fonctionnelle hors du QML Viewer. Une remarque cependant : cet article ne parle pas de traduction dynamique de l'application, seulement d'une unique traduction au lancement.

    Dans QML, quand une propriété change de valeur, elle émet un signal NOTIFY qui informe les propriétés en dépendant qu'elles doivent également actualiser leur valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Rectangle {
        // Cette propriété s'actualise après chaque émission du
        // signal NOTIFY de la propriété pressed de la mouseArea :
        color: mouseArea.pressed ? "blue" : "black"
        anchors.fill: parent
     
        MouseArea {
            id: mouseArea
            anchors.fill: parent
        }
    }
    Pour effectuer une traduction dynamique, il est nécessaire d'avoir une propriété qui puisse notifier les propriétés textuelles d'un changement de langue. C'est-à-dire que si on se situe dans un élément Text avec une propriété text: qsTr("Bonjour"). Si la langue change durant l'exécution, aucune propriété dans l'expression ne peut notifier de ce changement.

    La classe LanguageNotifier dans laquelle se situe une propriété QString qui est toujours définie à "" mais qui émet un signal de notification à chaque demande de changement de valeur.

    Code C++ : 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
    class LanguageNotifier : public QObject
    {
        Q_OBJECT
        Q_PROPERTY(QString language READ getLanguage WRITE setLanguage NOTIFY languageChanged)
     
    public:
        LanguageNotifier(QObject *parent = 0) : QObject(parent), _language(QString()) { }
        QString getLanguage() const { return _language; }
        void setLanguage(const QString&) {
            emit languageChanged();
        }
     
    Q_SIGNALS:
        void languageChanged();
     
    private:
        QString _language;
    };

    Définition de la propriété contextuelle par exemple dans le main.cpp :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LanguageNotifier notifier;
    viewer.engine()->rootContext()->setContextProperty("notifier", &notifier);

    Et dans le QML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Text {
        text: qsTr("Bonjour") + notifier.language
        // ...
    }
    Lors d'un changement de langue (donc actualisation du Translator avec le nouveau fichier de langue), le C++ devra effectuer un notifier.setProperty("language", "La valeur est inutile."). Cela entraînera une actualisation automatique des propriétés dépendant de notifier.language, ce qui rappellera qsTr() et qui retraduira donc les éléments concernés.

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  4. #4
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 600
    Points : 3 578
    Points
    3 578
    Par défaut
    Citation Envoyé par Amnell Voir le message
    La méthode exposée dans l'article est fonctionnelle hors du QML Viewer.
    Exact. Autant pour moi.
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

Discussions similaires

  1. Interface de manche virtuel guitare & QML
    Par betsprite dans le forum Débuter
    Réponses: 6
    Dernier message: 08/10/2010, 13h58
  2. Traduction francaise interface SUGARCRM
    Par patrick.deb dans le forum SugarCRM
    Réponses: 2
    Dernier message: 18/08/2010, 09h23
  3. [1.x] Traduction i18n qui ne remplace pas les chaines de mon interface
    Par Adesfire dans le forum Symfony
    Réponses: 9
    Dernier message: 16/12/2009, 15h27
  4. traduction 'graphical user interfaces'
    Par kalyparker dans le forum Contribuez
    Réponses: 1
    Dernier message: 11/07/2007, 22h00

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