Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Maîtrisez Qt
  3. Traduction d’une application
Extrait - Maîtrisez Qt Guide de développement d'applications professionnelles (3e édition)
Extraits du livre
Maîtrisez Qt Guide de développement d'applications professionnelles (3e édition)
1 avis
Revenir à la page d'achat du livre

Traduction d’une application

Objectifs

La traduction de vos applications est nécessaire si vous souhaitez la vendre à l’international, sur l’App Store, sur celui d’Ubuntu ou le Google Play Store par exemple. Pour traduire une application il vous faut prendre quelques dispositions dès la saisie des premières lignes de code contenant du texte à traduire.

Ce chapitre présente l’organisation qu’il faut avoir individuellement ou en équipe pour préparer la traduction d’une application ainsi que les techniques permettant de réaliser des applications disponibles dans toutes les langues du monde.

Cycle de traduction

Le travail de traduction est souvent confié à une personne extérieure à l’équipe de développement, en particulier pour les projets de taille importante. La conception de l’application doit donc être faite dans le respect du travail des traducteurs qui, s’ils ne disposent pas d’informations suffisamment précises sur ce qu’ils ont à traduire, risquent de fournir une traduction imprécise voire erronée.

images/15_SC_01.png

Une organisation du travail envisageable est la suivante :

  • Une équipe de développeurs écrit le code de l’application, ainsi que les chaînes de caractères adjointes d’un commentaire éventuel permettant au traducteur de comprendre le contexte de traduction.

  • Une équipe de traducteurs effectue une traduction du texte, sans voir fonctionner l’application, les textes sont traduits dans différentes langues et transmis.

  • Un intégrateur, ou une usine logicielle intègre les traductions dans l’application, la compile et procède au packaging.

  • Une équipe de testeurs procède aux tests fonctionnels de l’application et vérifie en même temps les traductions.

  • Un rapport de bugs et d’anomalies est transmis à l’équipe de développement qui procède à la correction des bugs ou à...

Rendre traduisible son application

Les chaînes de caractères à traduire se trouvent à deux endroits :

  • Le code source.

  • Les vues créées avec le concepteur d’interfaces graphiques.

Nous allons tout d’abord nous préoccuper de rendre toutes nos chaînes de caractères traduisibles, et éventuellement d’exclure celles que nous ne voulons certainement pas traduire.

Le code source est disponible dans le projet Traduction.

1. Code source

Seules les classes héritant de la classe QObject offrent l’accès au mécanisme de traduction intégré à Qt. En effet, la classe QObject contient une fonction membre tr() qui renvoie une chaîne de caractères QString.

Une chaîne de caractères déclarée dans un QString implicitement ou explicitement ne sera pas traduisible. Une chaîne de caractère déclarée statiquement non plus. Seules les chaînes déclarées dans la fonction tr() le sont.

//Aucune de ces chaînes ne sera traduisible 
char* uneChaineStatique = "Une chaine statique" ; 
QString uneChaine = "QString implicite" ; 
QString uneChaine("QString explicite") ; 
 
//Cette chaîne sera traduisible 
QString chaine = tr("Une chaine statique") ; 
 
//La première partie...

Traduire son application

La traduction de notre application commence par une modification du fichier projet. Vous devez ajouter à votre fichier .pro la directive TRANSLATIONS et lui fournir la liste des fichiers utilisés pour la traduction. Il s’agit là des fichiers utilisés pour la traduction dans différentes langues et éventuellement régions. Vous utiliserez un fichier par langue et région.

1. Langue et région

Le monde contient un certain nombre de pays et un certain nombre de langues. Chaque pays peut utiliser plusieurs langues, tout comme chaque langue peut être parlée dans plusieurs pays et chaque langue peut être déclinée selon plusieurs « traditions ».

Si nous ne prenons que deux exemples, le français et l’anglais, le premier est parlé en France métropolitaine, dans l’outremer, au Canada, en Belgique, en Suisse, etc. Quant à l’anglais, il est parlé au Royaume-Uni, aux États-Unis, au Canada, en Australie, mais c’est aussi une langue comprise dans de très nombreux pays dont elle n’est pas la langue officielle.

Le fait qu’une langue soit parlée dans plusieurs pays implique souvent des différences linguistiques plus ou moins importantes. Le français de France est assez différent du français de Québec et l’anglais du Royaume-Uni est lui aussi différent de l’anglais des États-Unis.

Vous pouvez parfaitement choisir d’ignorer ces différences et de ne pas tenir compte de la région dans laquelle se situe l’utilisateur et lui proposer le même anglais qu’il soit aux États-Unis ou au Royaume-Uni. Dans ce cas, vous pourrez vous contenter de nommer vos fichiers fr.ts pour les francophones et en.ts pour les anglophones. Dans le cas contraire, vous prendrez en compte la région dans le nommage de vos fichiers et utiliserez un nom tel que fr_FR.ts pour le français de France et fr_CA.ts pour le français du Canada. Ou encore en_EN.ts pour l’anglais du Royaume-Uni...

Contexte de traduction

Il est nécessaire, en tant que développeur, de prendre en considération les différences linguistiques qui peuvent être très importantes. Une chaîne statique sera facilement traduite :

« cette chaîne sera traduite » -->« this string will be translated ».

En revanche, lorsque le texte à traduire comporte des variables, celles-ci seront positionnées éventuellement différemment en fonction des langues :

« traitement du fichier n°1 » -->« processing file #1 ». Dans ce cas précis, il est important d’utiliser correctement la syntaxe des fonctions tr() et arg() comme ceci :

tr("traitement du fichier n°%1").arg(QString::number(num)) ; 

Pour être traduit en :

"Processing file #%1" 

D’autres langues s’écrivent de droite à gauche :

images/capture%2009_p388.png

Enfin, dans certains cas les valeurs injectées nécessitent d’être traduites elles aussi :

QString valeurInjectee ; 
 
if(a==b) 
   valeurInjectee = tr("une valeur") ; 
else 
   valeurInjectee = tr("autre valeur") ; 
 
QString texte = tr("La valeur est : %1").arg(valeurInjectee) ; 
QString texte2 = tr("En...