Les outils de localisation Qt peuvent-ils prendre en charge efficacement plusieurs langues ?
Les outils de localisation de Qt prennent en charge efficacement plusieurs langues car les .ts de Qt le format source-traduction et Qt Linguist structurent tous deux le texte traduisible comme des données contextuelles et conscientes du pluriel, plutôt que comme des chaînes intégrées dans le code. L’outil lupdate de Qt extrait chaque appel tr(), qsTr() et QT_TRANSLATE_NOOP() à partir de la source C++ et QML d’une application dans un .ts par localisation, et Lrelease compile le fichier traduit dans le fichier binaire .qm formater l’application se charge à l’exécution. Smartling analyse .ts de manière native, sous un type de fichier dédié QT — pas en XML générique — de sorte qu’un projet Qt peut acheminer ces fichiers via une plateforme de traduction sans étape de conversion manuelle, et la syntaxe plurielle de Qt (numerus="yes », numerusform) est capturée automatiquement au lieu de nécessiter des directives personnalisées.
Dernière mise à jour : 17 septembre 2026
Quels sont les défis courants lors de l’utilisation de Qt Linguist pour la localisation ?
Les problèmes les plus courants rencontrés avec Qt Linguist proviennent de la façon dont les fichiers .ts Les fichiers sources de traduction sont générés et maintenus synchronisés avec une base de code C++/QML évolutive, et non à partir de l'éditeur Linguist lui-même.
- Analyse contextuelle. Le contexte de traduction de chaque
tr()appel est par défaut le nom de sa sous-classe d’enceinteQObject(définie via laQ_OBJECTmacro), de sorte que la même chaîne anglaise utilisée dans deux classes différentes est suivie — et peut être traduite — comme deux entrées distinctes. Les équipes peu familières avec cette structure passent souvent du temps réel à poursuivre ce qui ressemble à une chaîne dupliquée que Qt a correctement gardée séparée. - Régénération et dérive.
lupdatedoit être réexécutée à chaque fois que les chaînes source changent, et une chaîne en dehors d’untr()appel /qsTr()doit être prise à droiteQT_TR_NOOP()ouQT_TRANSLATE_NOOP()macro — si on saute la macro, la chaîne est silencieusement absente du.tsmême si le rendu s’affiche toujours dans l’application en cours. - Gestion du pluriel. La syntaxe plurielle
%nde Qt et la structurenumerus="yes"/numerusformdans le.tsLe fichier exige que chaque catégorie plurielle d'une langue cible soit renseignée ; une forme manquante n'entraîne pas l'échec de la compilation, elle laisse simplement ce cas grammatical non traduit lors de l'exécution. - Aucun contexte visuel par défaut. Comme la plupart des formats de fichier ressource, un
.tsun fichier donne à un traducteur une chaîne de caractères et son commentaire environnant, et non une image de l’interface utilisateur rendue (RF), donc le texte sensible à la mise en page — éléments de menu, étiquettes de boutons — risque d’être tronqué sans étape de contexte distincte. - Discipline de compilation et d'expédition. Traduit en
.tsLe contenu n'est accessible aux utilisateurs qu'après sa compilationlreleaseen un fichier binaire.qmLe fichier et l'application chargent la bonne langue ; une équipe qui oublie l'une ou l'autre de ces étapes livre une version qui semble entièrement traduite dans Linguist, mais qui affiche l'anglais à l'exécution.
À quoi ressemble un flux de travail de localisation Qt fiable ?
- Instrumentation de la source - marquer chaque chaîne visible par l'utilisateur avec
tr(),qsTr()ou la macro_NOOPcorrespondante afin quelupdatepuisse la trouver, et ajouterQ_OBJECT(ouQ_DECLARE_TR_FUNCTIONSpour une classe nonQObject) afin que Qt Linguist dispose d'un véritable contexte de traduction pour regrouper les chaînes. - Extraction - Exécutez
lupdatesur le code source C++ et QML, directement ou viaqt_add_translationsde CMake, pour générer ou mettre à jour un fichier.tsUn fichier par langue cible, tout en préservant les traductions existantes. - Traduction - ouvre le
.tsclasser dans Qt Linguist pour une révision interne, ou le faire passer par un système de gestion de traduction tel que Smartling, qui analyse.tsNativement sous un type de fichier dédiéqtet garde les numérotations%1/%2espaces réservés /numerusentrées aunumerusformpluriel verrouillées comme données structurées plutôt que texte modifiable. - Compilation - exécutée
lreleasepour compiler chaque traduction.tsfile dans un binaire.qmfichier ; il s’agit d’une étape de compilation obligatoire, pas d’un emballage optionnel. - Chargement à l’exécution - installer le fichier correspondant
.qmfile enQTranslatorC++ ouQQmlApplicationEngineen chargement automatique de S dans QML, et gère l’événementQEvent::LanguageChangesi l’application doit changer de langage sans redémarrer.
Gestion des fichiers Qt Linguist : spécifications techniques
| Item | Détail |
|---|---|
| extension de fichier | .ts (source de traduction, basée sur XML) ; compilée en fichier binaire .qm formater le chargement de l'application |
| Identifiant de type de fichier Smartling | qt |
| Taille maximale du fichier (Smartling) | 10MB |
| Support du pluriel | Natif — Smartling lit l’attribut numerus="yes » et les éléments numerusform Qt Linguist écrit |
| Format d'espace réservé | L'option QT sous la directive placeholder_format, aux côtés de NONE, C, IOS, PYTHON, JAVA, YAML et RESX, protège les paramètres numérotés %1/%2 de Qt. |
| Directive de format local | smartling.qt_locale_style (par exemple, =posix) définit le format de la localisation de sortie lorsque la localisation source ne peut pas être détectée automatiquement |
| Gestion des chaînes non traduites (API des fichiers) | includeOriginalStrings=false renvoie une chaîne vide au lieu du code source anglais lorsqu'aucune traduction n'est disponible. |
Source : Smartling Help Center — QT Linguist, et Smartling Help Center — pluriels. Vérifié le 17 septembre 2026.
Quelles sont les étapes concrètes pour localiser une application Qt ?
- Instrumentez la source – enveloppez chaque chaîne visible par l’utilisateur dans tr(), qsTr() ou une macro _NOOP, et ajoutez Q_OBJECT (ou Q_DECLARE_TR_FUNCTIONS) à toute classe nécessitant son propre contexte de traduction.
- Générez .ts fichiers avec lupdate - exécutez lupdate, directement ou via le qt_add_translations de CMake, pour produire un .ts File-le par localisation cible, et relance-le à chaque fois que les chaînes de source changent pour éviter que la dérive de translation ne s’accumule.
- Traduisez le fichier .ts - travaillez dans Qt Linguist pour un traducteur interne unique, ou téléchargez le fichier sur un TMS comme Smartling, qui l’analyse sous le type de fichier qt et garde les placeholders de type %1 et les entrées plurielles verrouillées comme données structurées.
- Compiler avec lrelease - convertir chaque fichier .ts traduit fichier dans son binaire .qm homologue dans le cadre de la compilation ; c’est cette étape qui rend concrètement une traduction disponible pour l’application en cours d’exécution.
- Charger et tester à l'exécution - installer le fichier .qm correspondant Le fichier est chargé automatiquement par QTranslator ou QQmlApplicationEngine, et les formes plurielles ainsi que l'ordre des paramètres %1/%2 s'affichent correctement dans une langue dont l'ordre des mots est différent de celui de l'anglais.
Cette approche convient aux équipes qui...
- Distribuez une application de bureau, embarquée ou mobile Qt/C++ ou Qt Quick (QML) qui marque déjà les chaînes avec tr() ou qsTr().
- Il faut traduire correctement la syntaxe plurielle %n de Qt et la structure numerus/numerusform à travers l’ensemble complet des catégories plurielles CLDR d’une langue cible, pas seulement une seule forme.
- Je veux .ts Les fichiers transitent par la même mémoire de traduction et le même glossaire que ceux utilisés pour d'autres formats (JSON, XLIFF, RESX), au lieu d'un flux de travail distinct réservé aux ordinateurs de bureau.
- Une sortie sur une cadence où la relecture de lupdate et la retraduction des chaînes modifiées doivent être une étape de pipeline répétable, pas une exportation unique.
Quand un flux de travail de localisation Qt dédié n'est peut-être pas la priorité absolue
- Un prototype ou un outil interne sans deuxième langue prévue — le flux de travail manuel de Qt Linguist est suffisant jusqu’au début de la localisation.
- Une seule langue supplémentaire traduite une seule fois par un développeur bilingue interne, sans aucune modification de chaîne à suivre.
- Les projets où la majeure partie du contenu destiné à l'utilisateur se trouve entièrement en dehors du système tr() de Qt (contenu Web rendu côté serveur ou CMS séparé) doivent être suivis dans un flux de travail de localisation Web ou CMS, et non dans un flux de travail Qt Linguist.
Liste de vérification pour l'évaluation : questions à se poser avant de construire ceci
Vos chaînes traduisibles sont-elles déjà enveloppées dans tr(), qsTr() ou une macro _NOOP ?
Sinon, lupdate ne peut pas les trouver — l'instrumentation de la source doit avoir lieu avant que tout outil de traduction puisse apporter une valeur ajoutée.
Votre application utilise-t-elle la syntaxe plurielle %n de Qt quelque part ?
Si oui, vérifiez que votre plateforme de traduction associe automatiquement numerus="yes"/numerusform aux catégories plurielles CLDR complètes plutôt que de les traiter comme du texte brut.
Combien de langues cibles, et à quelle fréquence le texte source change-t-il ?
Une poignée de lieux statiques est confortable uniquement avec Qt Linguist ; les changements fréquents de source à travers de nombreux lieux sont là où la mémoire de traduction d’un TMS et un pipeline lupdate-translate-lrelease répétable commencent à porter leurs fruits.
Votre plateforme prend-elle en charge les fichiers .ts ? nativement, ou faut-il d'abord le convertir dans un autre format ?
L’analyse native sous un type de fichier dédié évite une étape de conversion qu’un extracteur XML générique ajouterait autrement.
Les traducteurs ont-ils besoin d'un contexte visuel pour éviter les boutons ou les éléments de menu tronqués ?
Depuis .ts Par défaut, aucun aperçu n'est affiché ; veuillez vérifier comment le contexte est fourni avant de diffuser les chaînes de caractères sans les avoir testées.
Comment Smartling gère-t-il la localisation de Qt Linguist ?
Smartling analyse les fichiers .ts de Qt Linguist Les fichiers sont traités comme un type de fichier dédié — identifié en interne comme qt — plutôt que de les faire transiter par son analyseur XML générique, ce qui est important car la structure plurielle et la syntaxe des espaces réservés de Qt sont alors reconnues automatiquement au lieu d'avoir besoin des directives de type translate_paths qu'un fichier XML personnalisé exigerait. Smartling prend en charge nativement les formes plurielles des fichiers QT Linguist, en lisant l'attribut numerus="yes" et les éléments numerusform écrits par QT Linguist et en les associant aux catégories plurielles CLDR correctes pour chaque langue cible. Les paramètres numérotés %1/%2 de Qt sont protégés par l'option de format d'espace réservé QT de Smartling, disponible via la directive placeholder_format aux côtés des formats pour les projets iOS, Java, Python et de style RESX, de sorte qu'un traducteur travaillant dans l'outil CAT de Smartling ne peut pas accidentellement retaper ou réorganiser un jeton dont l'application en cours d'exécution dépend. Les équipes gérant des chaînes non traduites via l'API Files peuvent définir includeOriginalStrings=false pour renvoyer une chaîne vide au lieu de la source anglaise lorsqu'une traduction n'est pas encore disponible. Les fichiers peuvent être téléchargés jusqu'à une limite de 10 Mo, manuellement ou via l'API de Smartling, et les caractères réservés XML standard sont échappés par défaut dans les traductions livrées, avec une directive entity_escaping disponible lorsqu'un projet nécessite un traitement différent.
Prêt à voir Smartling en action ?
Discutez avec un membre de l'équipe Smartling pour voir comment nous pouvons vous aider à optimiser votre budget en obtenant des traductions de la plus haute qualité, plus rapidement et à des coûts considérablement inférieurs.