La traduction d'interfaces QML

| Guillaume Fortin | Aktaour |

Le but de cet article est de tester l'internationalisation des applications QML.

On s'appuie sur la documentation de Qt, « QML Internationalization ».

Commentez !

- Titre : La traduction d'interfaces QML

- Auteurs : Guillaume Fortin, Aktaour

- Parution : 25 février 2011

- Mise à jour : 17 avril 2011

- Licence : Copyright ® 2011 Guillaume Fortin. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Mots clés

- II. Tests

- III. Interrogation

- IV. Traduction de l'application QML

- V. Tests

- VI. Conclusion

I - Mots clés

L'internationalisation d'une application classique Qt passe par l'utilisation de tr().

tr("bonjour")

En QML, le mot clé "tr" a été remplacé par "qsTr".

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++, on utilisera toujours le mot clé « tr » ; dans les fichiers QML, on utilisera le mot clé "qsTr".

II - Tests

On crée un projet de type QML Application.

Le fichier QML généré est le suivant.

import Qt 4.7
Rectangle {
width: 200
height: 200
Text {
x: 66
y: 93
text: "Hello World"
}
}

On modifie la chaîne HelloWorld par qsTr("Bonjour").

import Qt 4.7
Rectangle {
width: 200
height: 200
Text {
x: 66
y: 93
text: qsTr("Bonjour")
}
}

Ce qui donne ceci en mode design :

Et ceci en exécution :

III - Interrogation

On n'a pas traduit l'application mais on a quand même la chaîne « Bonjour » affichée. Pourquoi ?

Tout simplement parce que le module de traduction de Qt affiche par défaut le texte non traduit s'il ne trouve pas de traduction.

IV - Traduction de l'application QML

La traduction de l'application fonctionne grâce à plusieurs exécutables : 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 :

lupdate fic1.qml fic2.qml &#150;ts trad.ts

- lrelease sert à compiler le fichier ts en un fichier binaire d'extension « *.qm » :

lrelease trad.ts

- linguist est une application graphique d'aide à la traduction.

V - Tests

On applique la traduction au projet ci-dessus.

Étape 1 : on ouvre une ligne de commande et on se place dans le répertoire de l'application.

Étape 2 : on génère le fichier QtTraduction.ts

Le fichier ressemble à ceci :

<?xml version="1.0" encoding="utf-8"?>
<!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>

Étape 3 : Qt Linguist. On lance la commande liguist QmlTraduction.ts et on choisit la langue cible de la traduction.

Ici, on renseigne la traduction française par une autre traduction française pour l'exemple.

Ensuite, on valide la traduction par le bouton entouré sur l'image.

On enregistre et quitte l'application. Dès lors, le fichier QmlTraduction est complété par la traduction.

<?xml version="1.0" encoding="utf-8"?>
<!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>

Étape 4 : génération du fichier de traduction compilé.

On lance la commande lrelease QtTraduction et on obtient un fichier QtTraduction.qm.

Étape 5 : lancement de l'application traduite.

Pour appliquer la traduction via qmlviewer, il faut préciser les fichiers de traduction via la commande :

Qmlviewer &#150;translation QtTraduction.qm QtTraduction.qml

VI - Conclusion

Voilà, il n'y a plus qu'à appliquer ce principe pour les traductions d'applications QML.

Merci à dourouc05 et à ClaudeLELOUP pour leur relecture !