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
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
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.
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.
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 } }
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", ¬ifier);
Et dans le QML :
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.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 Text { text: qsTr("Bonjour") + notifier.language // ... }
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
Partager