janvier
2011
Le but de ce billet est de tester l’internationalisation des applications QML.
Je m’appuie sur la documentation Qt « QML Internationalization » disponible sur ce lien http://doc.qt.nokia.com/4.7-snapshot/qdeclarativei18n.html.
Mot clés :
L’internationalisation d’une application classique Qt passe par l’utilisation de la balise tr().
Exemple : tr(« bonjour »).
En QML, le mot clé « tr » a été remplacé par « qsTr« .
Exemple : qsTr(« bonjour »).
Le mot clé « qsTr » peut être remplacé d’après la documentation par « qsTranslate« , « QT_TR_NOOP » et « QT_TRANSLATE_NOOP« .
Dans le code C++, j’utiliserai toujours le mot clé « tr » et dans mes fichiers QML, j’utiliserai le mot clef « qsTr ».
Tests :
Je crée un projet de type QML Application.
Le fichier QML généré est le suivant.
Rectangle {
width: 200
height: 200
Text {
x: 66
y: 93
text: "Hello World"
}
}
Je modifie la chaîne HelloWorld par qsTr(« Bonjour »).
Rectangle {
width: 200
height: 200
Text {
x: 66
y: 93
text: qsTr("Bonjour")
}
}
Ce qui donne ceci en mode design :
Et cela en exécution:
Interrogation :
Je n’ai pas traduit mon application mais j’ai quand même la chaîne « Bonjour » affichée.
Pourquoi ?
Tout simplement car le module de traduction de Qt affiche par défaut le texte non traduit s’il ne trouve pas de traduction.
Traduction de l’application QML:
La traduction de l’application fonctionne grâce à plusieurs logiciels : lupdate.exe, lrelease.exe et linguist.exe
- lupdate sert à générer un fichier xml d’extension « .ts » contenant les traductions de plusieurs fichiers QML.
Exemple : lupdate fic1.qml fic2.qml –ts trad.ts - lrelease sert à compiler le fichier ts en un fichier binaire d’extension « *.qm »
Exemple : lrelease trad.ts - linguist est une application graphique d’aide à la traduction.
Tests :
J’applique la traduction au projet ci-dessus :
Etape 1 : J’ouvre une ligne de commande dos et je me place dans le répertoire de mon application
Etape 2 : Je génère le fichier QtTraduction.ts
Le fichier ressemble à ceci :
<!DOCTYPE TS>
<TS version="2.0">
<context>
<name>QtTraduction</name>
<message>
<location filename="QtTraduction.qml" line="9"/>
<source>Bonjour</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
Etape 3 : Qt linguist
Je lance la commande : liguist QmlTraduction.ts et je choisi la langue cible de ma traduction.
Ici je renseigne la traduction française par une autre traduction française pour l’exemple.
Ensuite je valide la traduction par le bouton entouré sur l’image.
J’enregistre et je quitte l’application.
Dès lors, le fichier QmlTraduction est complété par la traduction.
<!DOCTYPE TS>
<TS version="2.0" language="fr_FR" sourcelanguage="fr_FR">
<context>
<name>QtTraduction</name>
<message>
<location filename="QtTraduction.qml" line="9"/>
<source>Bonjour</source>
<translation>Salut</translation>
</message>
</context>
</TS>
Etape 4 : Génération du fichier de traduction compilé
Je lance la commande : lrelease QtTraduction et j’obtiens un fichier QtTraduction.qm.
Etape5 : Lancement de l’application traduite.
Pour appliquer la traduction via qmlviewer, il faut préciser les fichiers de traduction via la commande :
Qmlviewer –translation QtTraduction.qm QtTraduction.qml
Voilà, je n’ai plus qu’à appliquer ce principe pour mes traductions d’applications QML.
Commentaires récents
- Mono for Android dans
- Mono for Android dans
- [Mono]Asynchrone Mon meilleur ennemi dans