I. La vidéo de la conférence



II. Le contenu en français

Présentation par Benjamin Poulain.

II-A. Présentation

II-A-1. Qui est Benjamin Poulain ?

Nous allons parler de la traduction d'application Qt. Combien d'entre vous ont déjà travaillé sur de la traduction d'application ? Et combien avec celle de Qt ? Alors, qui suis-je ? Chez Nokia, j'ai commencé il y a un an en tant qu'ingénieur sur le support technique. J'ai rejoint l'équipe de WebKit il y a un mois et maintenant je travaille sur la stabilité de WebKit pour Qt 4.6. Je travaille parfois sur tablette graphique et sur le support de toutes les plateformes.

II-A-2. Que fais-je après le travail ?

En dehors de mon travail, je fais un peu de hack, je crée quelques applications Web en Python. Je fais beaucoup de sport : de la course, du cyclisme, de l'escalade. Depuis que je suis en Norvège, j'ai essayé d'apprendre le snowboard. Comme vous pouvez le voir, je ne suis pas si bon. J'ai eu mon second accident l'année dernière.

II-A-3. Pourquoi travailler sur la traduction ?

Je ne suis pas celui qui a écrit la partie traduction de Qt. Je suis très intéressé par la traduction parce que l'anglais n'est pas ma langue maternelle. Ma famille ne parle pas non plus l'anglais, je suis donc conscient qu'il y a un besoin de support en français. Je porte un intérêt particulier à la traduction à cause de cela. Quand j'ai rejoint les développeurs de Qt, j'ai essayé d'améliorer le statut du support du français dans Qt. J'ai travaillé sur la traduction du tutoriel en français, aidé la communauté francophone : je suis maintenant en charge de la traduction de Qt. Si vous voulez aider à la traduction de documents, vous êtes les bienvenus.

II-B. Pourquoi s'y intéresser ?

II-B-1. Qu'allons-nous faire aujourd'hui ?

Pourquoi la traduction devrait-elle vous intéresser ? Comment traduire une application en quelques étapes ?

Nous allons nous y intéresser de plusieurs points de vue :
  • Premièrement, le développeur de l'application (que doit-il faire dans son application pour la traduire) ;
  • Secondement, le traducteur (quels outils sont à votre disposition pour vous aider à traduire).

Ensuite, nous verrons d'autres problèmes. Il y a quelques cas que vous ne devriez pas rencontrer souvent et d'autres choses que vous devriez savoir.

II-B-2. Pourquoi la traduction devrait-elle vous intéresser ?

Évidemment, en tant que développeurs, nous pensons que tout le monde parle anglais parce que nous le parlons. Le fait est que ce n'est pas vrai. Vous pouvez voir ici un graphique usuel, qui montre les proportions entre les gens qui parlent anglais comme langue maternelle, ceux qui ont appris l'anglais et ceux qui ignorent tout de l'anglais.

Le problème est l'écriture de l'application, sa vente : c'est la partie la plus dure. Traduire est, par contre, extrêmement simple : on extrait les chaînes, on les donne au traducteur, on les récupère et c'est tout. Ce n'est pas toujours évident ; mais, habituellement, ça fonctionne.

Puisque la partie la plus dure du développement d'une application est l'écriture du code, essayez de la diffuser en la traduisant dans plusieurs langues.

II-C. Traduire votre application

II-C-1. Ugly Snake est un petit jeu avec Qt

Premièrement, prenons le point de vue du développeur : comment pouvons-nous changer une application pour qu'elle soit traduite ? Il y a quelques étapes simples à faire pour avoir cette application simple en français à la fin de la présentation. Elle s'appelle Ugly Snake. C'est un simple jeu pour mobiles. On peut changer la vitesse avant de jouer. Nous allons travailler dessus et nous assurer qu'elle soit bien traduite en français.

II-C-2. Comment traduire l'application ?

Quelles sont les quelques étapes pour la traduction ? Il y en a généralement 4 :
  • Changer le code (ou l'écrire) pour qu'il soit traduisible : il suffit d'utiliser quelques fonctions ;
  • Extraire les chaînes de l'application et créer un fichier externe avec la traduction anglaise ;
  • Donner ces chaînes extraites au traducteur, qui assure la correspondance ;
  • Dès que la traduction est achevée, récupérer les chaînes et les compiler dans l'application.

J'ai aussi mis dans la présentation les outils que vous utiliserez à chaque étape. Quand vous développez, vous utilisez votre EDI favori, qui dispose des options nécessaires pour la traduction. Ensuite, vous extrayez les chaînes avec lupdate ; le traducteur peut utiliser Qt Linguist ou tout autre outil qu'il connaît. Finalement, vous utilisez lrelease pour compiler les chaînes et les utiliser dans votre application.

II-C-3. Les fichiers .ui constituent la plus grosse partie

La première partie de l'application est son interface utilisateur, soit les fichiers .ui. La plupart des chaînes sont dans ces fichiers. C'est la partie la plus importante pour l'utilisateur, étant donné que c'est ce qui est vu. C'est là que vous mettez les layouts, que vous dessinez votre application. Ainsi, vous vous assurez que votre application soit traduisible dans toutes les langues.

La bonne nouvelle est que vous n'avez rien à faire ici pour rendre l'application traduisible : les chaînes sont automatiquement extraites par les outils (lupdate peut les récupérer). Vous avez la traduction : c'est tout ce dont vous avez besoin.

Faisons-le avec l'exemple.

J'ai ajouté un fichier à mon projet. Je veux la traduction française, j'ai donc ajouté le fichier .ts généré. Ce fichier est le fichier qui peut être traduit. Tout ce que j'ai à faire est de lancer lupdate sur mon projet. Les chaînes du .ui sont extraites, j'ai donc ici un nouveau fichier .ts, un fichier avec les chaînes prêtes pour la traduction du .ui.

II-C-4. Questions

II-C-4-a. Puis-je changer la langue à l'exécution ?

Oui, cela sera vu plus tard.

II-C-4-b. Dois-je le faire tous les jours ?

Non, juste avant la sortie : cette partie ne doit pas être travaillée autant que le code.

II-C-5. Traduire les chaînes avec tr()

Ceci était le cas simple. Maintenant, voyons ce qui arrive quand nous devons changer le code source.

Il y a une fonction principale dont vous devez vous rappeler : tr(), une fonction statique de QObject, disponible dans tous les QObject. Très simplement, tout ce que vous devez faire est d'utiliser tr() à chaque fois qu'il y a une chaîne à traduire : elle est prête pour l'extraction ! La chaîne retournée par tr() est la chaîne traduite dans la langue cible.

tr() ne fonctionne pas très bien avec la concaténation. Si vous avez des chaînes comme celles-ci, elles sont assez inutiles au traducteur. En effet, le problème est que l'ordre des mots n'est pas le même dans toutes les langues. Il arrive que le traducteur doive changer l'ordre des mots dans une phrase. Avec ce genre de code, il ne pourra pas changer l'ordre des mots parce qu'il n'a aucun contrôle sur le code. D'une manière assez classique, pour la concaténation, vous devriez utiliser tr() avec la fonction arg() de QString.

Ce qui est retourné par tr() est un QString et on se repose sur ce fait. Le traducteur aura un symbole % dans la chaîne et il peut mettre ce symbole à la fin, si cela est nécessaire. Au lieu d'avoir %1, on a %n, parce que cette forme supporte les pluriels. Il y aura deux chaînes dans Qt Linguist : une pour le singulier, une pour le pluriel. Il peut donc y avoir plusieurs traductions : une avec « s », un sans « s ».

tr() est la forme principale à utiliser, elle se retrouve d'ailleurs dans le code généré par uic. Toutes les chaînes protégées par tr() sont ainsi traduites.

II-C-6. Fournir du contexte pour les petites chaînes

Il y a un problème pour le traducteur avec les chaînes courtes : il n'a pas assez de contexte. Il y a un exemple ici : « The %1 is %2 ». Le traducteur n'a pas assez de contexte pour traduire ceci.

Rapidement, en français, on peut traduire The par Le ou La ou Les, cela dépendant du mot suivant. On doit aider le traducteur en fournissant du contexte pour qu'il puisse traduire correctement.

Il y a trois méthodes pour ajouter un contexte :
  • La chance : comme espéré, ceci peut fonctionner… ou non (et n'est pas supporté par Qt) ;
  • Avec tr() : en tant que second argument de tr(), on peut mettre, par exemple, un exemple de chaîne résultante, pour que le traducteur comprenne la signification des arguments ;
  • Avec des commentaires : depuis Qt 4.5, on peut ajouter un contexte avec des commentaires.

Il y a une sorte spéciale de commentaires. En ajoutant un symbole deux-points, le reste de la ligne est considéré comme contexte, la désambiguation de la chaîne. Il sera extrait par lupdate et lié à la phrase, ensuite montré avec la chaîne dans Qt Linguist. L'avantage est que ce commentaire ne sera pas dans le fichier binaire.

Si vous voulez cacher quelque chose, parce que cela parle d'un projet qui n'est pas encore dévoilé, vous ne pouvez pas le mettre dans le binaire : en effet, on peut extraire les chaînes d'un binaire. Avec cet exemple, aucun commentaire ne se retrouvera dans le binaire.

II-C-7. Combien de chaînes pour la traduction ?

Que faire si vous ne voulez pas présenter certaines chaînes à la traduction ? Si vous les voulez extraites par lupdate, mais pas traduites (par exemple, vous devez les envoyer par un socket) ?

Il y a une autre fonction prévue à cet effet : QT_TR_NOOP, une macro qui ne fait rien, mais qui marque la chaîne pour traduction. Elle sera toujours extraite par lupdate et toujours marquée pour traduction.

Un simple exemple. Nous avons la constante EDITOR et nous traduirons la chaîne plus tard avec tr(), en lui donnant la variable comme paramètre. La chaîne sera dans le fichier de traduction, elle devra toujours être traduite.

Nous allons faire cela avec l'exemple.

Il n'y a que peu de chaînes qui passent par tr() et d'autres qui devraient. Ajoutons un peu de contexte.

Lançons lupdate encore une fois. Nous avons sept nouvelles chaînes en plus des chaînes extraites des fichiers d'interface. Si nous regardons le fichier de traduction, nous avons les chaînes en provenance de l'interface et celles de la source, extraites grâce à tr().

II-C-8. L'application utilise une version compilée de la traduction

Prochaine étape : nous avons envoyé les chaînes au traducteur et il a renvoyé le fichier .ts traduit. Nous devons maintenant introduire les traductions dans l'application.

Dans l'application livrée, il n'y a pas de fichier .ts : ce sont des fichiers externes, avec des commentaires et des informations que vous ne voulez pas montrer au public. Aussi, ce fichier est lent, car externe.

Le fichier .ts est donc compilé par lrelease en un fichier .qm. Ce dernier cherche d'abord en fonction de la chaîne : il s'agit d'un dictionnaire. Habituellement, il n'est pas mis dans le binaire. Cela peut être fait grâce au système de ressources de Qt, mais il s'agit d'une mauvaise idée : en effet, si le nombre de traductions augmente, toutes les traductions vont être chargées en mémoire au lancement de l'application. Elles ne sont pas désirées en mémoire : vous les voulez dans le système de fichiers, vous ne voulez que les chaînes de la traduction actuelle.

Généralement, le fichier .qm est situé dans le répertoire qui en a besoin à l'exécution.

II-C-9. Un traducteur doit être installé

On charge les fichiers .qm via QTranslator. Il associe une chaîne à sa traduction et est initialisé avec le fichier .qm.

Voici le QTranslator pour Ugly Snake. Je charge le fichier .qm et j'installe le QTranslator sur QApplication.

Quel fichier dois-je charger ? J'ai utilisé la locale pour lui donner un nom. Ici, je ne charge pas un fichier spécifique : le QTranslator est intelligent. Puisque la traduction ne réside que dans un seul fichier, si le fichier n'est pas trouvé, QTranslator va essayer uglysnake.

Faisons-le avec l'exemple. J'ai déjà une traduction quelque part. Je la compile avec lrelease. J'ai maintenant un fichier .qm. Je vérifie que j'ai bien un QTranslator. Je dois juste changer la langue. Et maintenant, l'application est en français.

II-D. Des outils pour les traducteurs

II-D-1. Il y a deux sortes d'outils pour la traduction

Jetons un coup d'œil aux outils proposés pour la traduction.

Nous ne fournissons qu'un outil, Qt Linguist, pour la traduction. Je montrerai plus tard un autre outil en ligne (il y a beaucoup d'outils du genre).

II-D-2. Présentation de Qt Linguist

Regardons de plus près Qt Linguist. J'ai le fichier traduit, le .ts. Il y a différents paneaux dans Linguist. Notamment, le contexte de la traduction. Généralement, il s'agit du fichier .ui d'où provient la chaîne. Ensuite, il y a la liste des traductions. Pour chaque chaîne anglophone, il y a un champ à remplir avec la traduction et un autre avec des commentaires sur la signification de la phrase.

Si vous distribuez Linguist avec les .ui et la source, il y a aussi du contexte ici. Comme ça, le traducteur peut voir le contexte d'utilisation. Parfois, cela aide le traducteur à comprendre le sens de la phrase.

Par exemple, si vous avez « victory! » et que le traducteur oublie de le traduire, il y a un avertissement pour dire quel est le problème, s'il y a une différence entre les traductions. Dans les deux vues (le contexte et la source), on peut voir un avertissement en face de la chaîne. Il montre que la chaîne devrait être revue : la traduction n'a pas la même constitution que l'original.

Une autre fonctionnalité intéressante est les guesses : ici, il y a les chaînes en anglais et, puisque des chaînes semblables ont déjà été traduites, Linguist vous propose des guesses en bas.

Une autre fonctionnalité de Linguist dans Qt 4.5 est le support de mutliples langues. Dans notre exemple, ajoutons l'espagnol. Grâce à lupdate, nous avons un nouveau fichier. Nous avons maintenant les deux langues dans la fenêtre de Linguist. Habituellement, les traducteurs parlent plusieurs langues, généralement similaires comme le français et l'espagnol. Il est très pratique pour eux d'avoir les deux côte-à-côte, vu la similarité entre les deux langues. Si on a raté une traduction, on a forcément raté l'autre. Il y a donc des icônes multiples d'avertissement.

II-D-3. Linguist, c'est bien, mais il faut le distribuer

Quels sont les points forts de Linguist ? Il supporte de multiples langues en simultané, ce qui n'est pas commun pour un outil de traduction. Il est très fortement intégré à Qt.

Si vous avez le fichier .ui, vous pouvez voir votre traduction directement dans Linguist. Si vous avez des chaînes dans votre application et des chaînes qui ne correspondent pas à la place qui leur est réservée, le traducteur va pouvoir le voir et adapter sa traduction en fonction. Ceci est évidemment très utile, spécialement quand vous avez des petits emplacements. C'est une partie de l'intégration avec Qt.

Il y a aussi une intégration plus approfondie avec les fichiers .ui.

II-D-4. Questions

II-D-4-a. Il s'agit bien de la meilleure manière de procéder, mais il faut le distribuer

En effet, c'est évident. Je n'ai qu'une solution à proposer : abandonner Linguist, ce que je vais vous montrer un peu après.

II-D-4-b. Puis-je uniquement distribuer les fichiers .ts aux traducteurs ?

Oui, sans problème. Cependant, ces fichiers sont justes externes, il ne fournissent aucune intégration avec Qt.

II-D-4-c. Est-il possible de marquer certaines chaînes comme non nécessaires ? Nous utilisons une grande base et il y a beaucoup de chaînes que nous aimerions ne pas traduire

Je n'ai jamais entendu parler de tels problèmes, nous en discuterons après la présentation.

II-D-4-d. Il y a beaucoup de chaînes dans notre application, mais beaucoup ne nécessitent pas de traduction (comme les unités : cm...)

Il est possible de marquer des chaînes comme n'ayant pas besoin d'être traduites, dans Designer.

II-D-4-e. Pourquoi ne peut-on traduire que les chaînes entourées de tr() et pas toutes ?

Dans certains cas, seules certaines chaînes sont désirées, pas toutes.

II-D-4-f. Peut-on traduire des sources non textuelles (comme une image, une chanson...) ?

Oui, grâce aux ressources. Ce cas sera vu un peu plus loin.

II-D-4-g. Est-il possible pour le traducteur de changer le fichier .ui, pour qu'il puisse convenir à sa traduction ?

Le meilleur moyen est en effet de lui fournir le fichier .ui. Ainsi, il pourra modifier sa traduction en fonction. S'il n'y a pas moyen de modifier la traduction, le traducteur peut demander au développeur de lui faire un peu de place. Nous travaillons actuellement sur un système qui permet de stocker plusieurs traductions pour une chaîne : Qt choisira la plus adaptée.

II-D-5. Pootle, c'est bien, mais il n'offre pas d'intégration

Pootle n'est pas créé par Nokia, c'est un projet open-source qui est compatible avec Qt : il peut charger des fichiers .ts. Par exemple, voici le fichier importé dans Pootle. Il s'agit du même genre d'application : on peut aller dans le fichier, voir les chaînes à traduire.

C'est exactement le même type d'outil : on donne les chaînes en anglais et on les traduit dans sa langue. À une exception : c'est un outil en ligne. Il suffit d'en donner l'URL, pas besoin de l'installer chez le traducteur.

Il y a aussi des outils pratiques dans Pootle : par exemple, vous pouvez transformer un fichier .ts en fichier .po.

Un bon point : vous n'avez pas besoin de le distribuer. Pour les amateurs, il n'y a pas besoin d'installer quelque chose. On prend les chaînes et on les traduit. Mais il n'y a pas la moindre intégration avec Qt : on ne peut pas voir le résultat dans l'interface, ce qui peut être dérangeant, parce que le développeur doit revérifier la traduction et adapter sa fenêtre.

II-E. Aller plus loin

Il y a des problèmes que vous ne rencontrerez pas tous les jours : nous allons voir comment les résoudre.

II-E-1. Un mot, plusieurs contextes

Si vous avez un mot court, vous devriez lui fournir un contexte, pour que le traducteur sache comment le traduire. Voici un exemple en français : “Edit”, en anglais, peut être un nom ou un verbe ; en fonction de sa nature, sa traduction en français sera différente. Quand vous avez des chaînes comme “Edit”, prenez l'habitude de leur mettre un contexte. Vous pouvez simplement dire s'il s'agit d'un verbe ou d'un nom.

On peut aussi le faire dans Designer. C'est ici, dans “Disambiguation”. C'est le même genre de chaîne qui devrait être ajouté dans le fichier .ui. Les commentaires ne désambiguïsent pas les chaînes.

Nous allons approfondir la manière dont les contextes fonctionnent. Au début, le contexte était appelé “désambiguïsation” dans la documentation. Nous avons une classe, une fonction… où nous avons ces deux chaînes. La première ligne fonctionnera, pas la seconde. Ici, il y a une ambiguïté. Il n'y a pas d'information dans l'appel à tr() pour distinguer les deux chaînes. C'est juste pour le traducteur, cela n'influe pas tr().

II-E-2. Comprendre contexte et désambiguïsation

Voyons comment fonctionne tr() derrière la scène.

Nous avons le mot que nous voulons traduire et sa désambiguïsation. Qt appelle “contexte” la classe. Le nom de la classe sera utilisé comme contexte. Il sera ajouté à l'appel de QCoreApplication dessus. Nous pouvons différencier le verbe et le nom grâce à ce contexte.

S'il n'y a pas de chaîne de désambiguïsation, il est impossible de savoir laquelle des deux traductions est correcte. Nous allons voir ce qu'il faut faire en ce cas très bientôt. S'il y a des chaînes avec désambiguïsation et d'autres sans elle, le QTranslator essaye les deux : avec et sans la désambiguïsation. Il créera donc deux chaînes : une avec et une sans désambiguïsation. On peut toujours en ajouter une.

II-E-3. Les commentaires ne désambiguïsent pas

Ainsi, comment résoudre ce problème ? On doit ajouter des chaînes de désambiguïsation pour que le traducteur puisse les utiliser. On peut toujours utiliser des commentaires : ils seront utilisés par Linguist, là où la désambiguïsation sera utilisée par le code pour différencier les chaînes.

II-E-4. Questions

II-E-4-a. Si on traduit l'article "the" dans d'autres langues, comme le français et qu'on lui donne un contexte, le traducteur ne saura pas toujours comment le traduire

Si vous mettez à la disposition du traducteur suffisamment de contexte, il saura quel mot utiliser, comme dans l'exemple. Si l'argument peut convenir aux deux mots, il n'y a pas de solution, si ce n'est avoir deux places dans le code. Il y a uniquement une chaîne de contexte, mais vous pouvez donner un commentaire plus long. La traduction devrait convenir au widgets.

II-E-5. Des interfaces plus joueuses

Que se passe-t-il lorsque vous ne pouvez pas adapter la taille de la traduction ? Habituellement, quand vous utilisez des layouts, la taille de la région change pour accueillir l'entièreté de la traduction. Ici, vous pouvez voir que les boutons s'adaptent à la taille du texte. Habituellement, cela fonctionne bien. Vous pouvez avoir des problèmes si vous utilisez des widgets, des layouts dont la taille est fixée, ou des écrans de mobiles. Il vous suffit de fournir le .ui au traducteur pour qu'il puisse résoudre ces problèmes.

II-E-6. Quelques images nécessitent une traduction

Si vous souhaitez traduire d'autres parties de votre application (images, chansons…), vous pouvez utiliser QResource, où vous pouvez spécifier une locale pour chaque ressource. Cette ressource sera chargée quand la locale sera le français. En général, essayez de les éviter, car cela représente une masse de travail conséquente : par exemple, vous devrez faire votre captures d'écran pour chaque langue.

Si vous ne spécifiez pas la langue, la ressource sera considérée comme convenant à toutes les langues. Ceci n'est pas supporté par Linguist.

Que se passe-t-il si vous souhaitez plusieurs interfaces (par exemple, si vous voulez supporter plusieurs tailles de skin, des conventions culturelles…) ? Vous pouvez utiliser QUILoader pour charger l'interface. Vous devrez écrire ce code, en vous basant sur la locale. C'est dur à maintenir et à documenter : il faut écrire une documentation par langue. C'est possible, mais évitez de l'utiliser.

Que faire si la langue change à l'exécution ? Par exemple, sur des téléphones, des terminaux publics, vous pourriez avoir plusieurs langues. Tous ceux-ci, en plus de Microsoft Windows, notifient l'application de tout changement de langue. Si vous n'êtes pas dans un de ces cas, ne vous en préoccupez pas : les utilisateurs sont habitués à devoir relancer l'application pour changer de langue.

II-E-7. Tout nécessite une nouvelle traduction

À l'installation du QTranslator, un évènement LanguageChange est émis. Vous pouvez intercepter cet évènement et retraduire votre application. Si vous utilisez Designer, vous pouvez retraduire vos interfaces et toutes les chaînes repasseront pas tr(). Si vous avez peint quelque chose vous-mêmes, il vous faudra le repeindre.

Par exemple, dans l'application de support Ugly Snake, il y a un cas où je dois mettre à jour le texte moi-même. J'appelle retranslateUI(), je dois mettre à jour ce qui est peint sur l'écran.

C'est ce que vous devez faire si vous avez des terminaux publics : vous installez simplement un nouveau QTranslator. Si votre widget répond à l'évènement LanguageChange, votre application sera traduite dans la nouvelle langue.

II-E-8. Quand faut-il changer le traducteur sous Windows ?

Dans le cas Windows, où l'utilisateur peut changer la langue dynamiquement, vous pouvez changer la langue au vol, pour que l'application soit traduite au vol. Vous pouvez aussi le faire avec Qt : il suffit d'écouter l'évènement LocaleChange. Il faut simplement installer un filtre d'évènements sur QApplication et de changer le traducteur.

II-E-9. Traduire pendant le dessin n'est pas une si bonne idée

Voici quelques problèmes que vous pourriez rencontrer pendant la traduction.

Voici le cas que nous avons dans l'application de support. Ce n'est pas exactement la même chose, mais la même idée. La chaîne reste en anglais pour tous les modèles et la langue change dans la vue. On traduit juste pendant le dessin.

Ceci pourrait avoir l'air d'être une bonne idée, parce qu'il n'y a qu'une seule langue dans le modèle. Mais ça ne fonctionne pas du tout. Voici un exemple de résultat. Voici la liste triée en anglais, qui n'a pas du tout le même ordre que la liste en français. Traduisez donc les chaînes dès que possible.

II-E-10. La source n'est pas en Latin-1

Que se passe-t-il si l'application n'est pas écrite en anglais ? Imaginez que vous avez une application en allemand. Ça ne fonctionnera pas, parce que les outils attendent des chaînes en Latin-1.

Vous pouvez écrire votre application en anglais : c'est la meilleure solution, parce que vous savez ce que l'application fait. Si vous voulez vraiment écrire votre application dans une autre langue, vous devez préciser le codec que tr() devra utiliser. Ceci se passe à l'exécution : tr() utilise le codec fourni lors de la recherche des chaînes. Quand vous extrayez les chaînes avec lupdate, vous devez aussi connaître le codec. Vous devez aussi spécifier le codec utilisé en mettant cette ligne dans votre fichier de projet : ainsi, lupdate connaît le codec employé.

II-E-11. Mac OS utilise une liste de langues

Mac OS X ne définit pas une langue à utiliser mais bien une liste de langues. Par exemple, si on a le français, l'espagnol et l'anglais dans cette liste, il ne faut pas basculer sur l'anglais dès que le français n'est pas trouvé. Il faut d'abord aller voir l'espagnol.

Nous ne fournissons pas de solution pour cela dans QTranslator, car c'est extrêmement simple à fixer si vous le voulez. Vous pouvez mettre un IFDEF, utiliser CoreFoundation pour récupérer les chaînes de la configuration et simplement itérer pour savoir quel QTranslator utiliser.

II-F. La fin

II-F-1. Qt rend la traduction facile

L'internationalisation est importante et simple à réaliser avec Qt. Il résout beaucoup de problèmes, par exemple avec les fichiers .ui. Tout ce que vous devez faire, c'est utiliser tr() et mettre un peu de contexte. J'aimerais donc que vous pensiez aux autres langues pour votre prochaine application.

III. Divers

Merci à l'équipe Qt pour son soutien lors de la traduction de cette vidéo et à Benj. pour sa relecture attentive, ainsi qu'à Benjamin Poulain pour sa présentation !