I. Mots clés

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

 
Sélectionnez
tr("bonjour")

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

 
Sélectionnez
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.

 
Sélectionnez
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").

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

Ce qui donne ceci en mode design :

Image non disponible

Et ceci en exécution :

Image non disponible

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

Image non disponible

Le fichier ressemble à ceci :

 
Sélectionnez
<?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.

Image non disponible

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

Image non disponible

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

Image non disponible

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

 
Sélectionnez
<?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.

Image non disponible

Étape 5 : lancement de l'application traduite.

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

 
Sélectionnez
Qmlviewer &#150;translation QtTraduction.qm QtTraduction.qml
Image non disponible

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 !