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 :
Sélectionnez
lupdate fic1.qml fic2.qml –ts trad.ts
-
lrelease sert à compiler le fichier ts en un fichier binaire d'extension « *.qm » :
Sélectionnez
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 –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 !