Les outils de localisation Qt peuvent-ils prendre en charge plusieurs langues efficacement?
Les outils de localisation de Qt supportent efficacement plusieurs langues parce que Qt est .ts 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 du code 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 les fichiers sont nativement 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 plutôt que de nécessiter des directives personnalisées.
Dernière révision : 17 septembre 2026
Quels sont les défis courants lorsqu’on utilise Qt Linguist pour la localisation?
Les défis les plus courants avec Qt Linguist viennent de la façon dont .ts les fichiers source translation-source sont générés et maintenus synchronisés avec une base de code C++/QML en mouvement, et non à partir de l’éditeur Linguist lui-même.
- Définition du contexte. Le contexte de traduction de chaque appel
tr()est par défaut le nom de sa sous-classeQObjectenglobante (définie via la macroQ_OBJECT), 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 qui ne connaissent pas cette structure perdent souvent un temps précieux à rechercher ce qui semble être une chaîne de caractères en double que Qt a correctement conservée séparée. - Régénération et dérive.
lupdatedoit être réexécutée à chaque modification des chaînes sources, et une chaîne située en dehors d'un appeltr()/qsTr()nécessite la macroQT_TR_NOOP()ouQT_TRANSLATE_NOOP()appropriée pour être prise en compte ; si la macro est omise, la chaîne est silencieusement absente du fichier.tsfichier, même s'il est toujours retourné dans l'application en cours d'exécution. - Manipulation au pluriel. La syntaxe plurielle de
%nQt et lanumerus="yes"structure /numerusformdans le.tsnécessite que chaque catégorie plurielle dans laquelle une langue cible doit être remplie; un formulaire manquant ne fait pas échouer la compilation, il laisse simplement cette majuscule grammaticale non traduite à l’exécution. - Aucun contexte visuel par défaut. Comme la plupart des formats de fichiers de ressources, un
.tsLe fichier fournit au traducteur une chaîne de caractères et son commentaire environnant, et non une image de l'interface utilisateur rendue ; par conséquent, le texte sensible à la mise en page (éléments de menu, étiquettes de boutons) risque d'être tronqué sans une étape de contexte séparée. - Discipline de compilation et expédition. Traduit
.tsLe contenu n’atteint les utilisateurs qu’aprèslreleasel’avoir compilé en binaire.qmet l’application charge le bon emplacement — une équipe qui oublie l’un ou l’autre des pas envoie une compilation qui semble entièrement traduite dans Linguist mais 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écuter
lupdatedirectement sur le code source C++ et QML, ou via CMakeqt_add_translations, pour en générer ou mettre à jour un.tsFichier par localisation cible tout en préservant les traductions déjà existantes. - Traduction - ouvrir le
.tsSauvegardez le fichier dans Qt Linguist pour une relecture interne, ou acheminez-le via un système de gestion de traduction comme Smartling, qui analyse les fichiers.tsnativement sous un type de fichierqtdédié et conserve les espaces réservés numérotés%1/%2et les entrées pluriellesnumerus/numerusformverrouillées en tant que données structurées plutôt qu'en tant que texte modifiable. - Compilation - exécutez
lreleasepour compiler chaque fichier.tstraduit fichier dans un fichier binaire.qmfichier ; il s'agit d'une étape de compilation obligatoire, et non d'un emballage optionnel. - Chargement à l'exécution - installez le fichier
.qmcorrespondant le fichier viaQTranslatoren C++ ou le chargement automatique deQQmlApplicationEngineen QML, et gérer l'événementQEvent::LanguageChangesi l'application doit changer de langue sans redémarrer.
Gestion des fichiers Qt Linguist : spécifications techniques
| Item | Détails |
|---|---|
| extension de fichier | .ts (source de traduction, basée sur XML); compile en .qm binaire Formater l’application se charge |
| Identifiant de type de fichier Smartling | qt |
| Taille maximale de fichier (Smartling) | 10MB |
| Soutien des formes plurielles | Originaire — Smartling lit l'attribut numerus="oui" et les éléments numerusform. Qt Linguist écrit |
| Format provisoire | 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 langue de sortie lorsque la langue source ne peut pas être détectée automatiquement. |
| Gestion des chaînes non traduites (API Fichiers) | includeOriginalStrings=false retourne une chaîne vide au lieu de la source anglaise lorsqu’aucune traduction n’existe |
Source : Centre d'aide Smartling — Linguiste QT et Centre d'aide Smartling — 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 qui a besoin de 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 Fichier par localisation cible, et relance-le à chaque fois que les chaînes de source changent pour éviter que la dérive de traduction ne s’accumule.
- Traduisez le fichier .ts : travaillez avec 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 conserve les espaces réservés de style %1 et les entrées plurielles verrouillées en tant que données structurées.
- Compiler avec lrelease - convertir chaque .ts traduit file dans son fichier binaire .qm équivalent dans le cadre de la construction; cette étape est ce qui rend réellement une traduction accessible à l’application en cours d’exécution.
- Charger et tester en cours d'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.
- Déployer à une fréquence où la réexécution de lupdate et la retraduction des chaînes modifiées doivent constituer une étape de pipeline répétable, et non une exportation ponctuelle.
Quand un flux de travail dédié à la localisation de Qt n’est peut-être pas la bonne priorité
- Un prototype ou un outil interne sans deuxième langue prévue — le flux de travail manuel de Qt Linguist est suffisant jusqu'à ce que la localisation commence réellement.
- Une seule langue supplémentaire traduite une seule fois par un développeur bilingue interne, sans aucune modification de chaîne à suivre.
- Des projets où la plupart du contenu destiné aux utilisateurs se situe complètement en dehors du système tr() de Qt — le contenu web rendu par serveur ou un CMS séparé appartient à un flux de travail de localisation web ou CMS, pas à Qt Linguist.
Liste de vérification pour l'évaluation : questions à se poser avant de construire ceci
Vos chaînes de caractères transférables sont-elles déjà enroulées dans tr(), qsTr() ou une macro _NOOP?
Sinon, lupdate ne peut pas les trouver — il faut instrumenter le code source avant que tout outil de traduction n’ajoute de la valeur.
Votre application utilise-t-elle la syntaxe plurielle %n de Qt quelque part ?
Si oui, confirmez que votre plateforme de traduction associe automatiquement les entrées 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 dans Qt Linguist seul; les changements fréquents de source dans 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 des boutons ou des é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 Qt Linguist .ts les fichiers comme un type de fichier dédié — identifié en interne comme QT — plutôt que de les router via son parseur XML générique, ce qui est important parce que la structure plurielle de Qt et la syntaxe du Placeholder sont alors reconnues automatiquement au lieu d’avoir besoin des directives de style 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="y » et les éléments numerusform que Qt Linguist écrit et les associe aux bonnes catégories plurielles CLDR pour chaque langue cible. Les paramètres numérotés%1/%2 de Qt sont protégés par l’option de format provisoire QT de Smartling, disponible via la directive placeholder_format aux côtés des formats pour des projets de type iOS, Java, Python et RESX, afin qu’un traducteur travaillant dans l’outil CAT de Smartling ne puisse pas accidentellement retaper ou réordonner un jeton dont dépend l’application en cours d’exécution. Les équipes qui gèrent des chaînes non traduites via l’API Fichiers peuvent configurer includeOriginalStrings=false pour retourner une chaîne vide au lieu de la source anglaise lorsqu’une traduction n’est pas encore disponible. Les fichiers téléchargent jusqu’à une limite de 10 Mo, soit manuellement, soit via l’API de Smartling, et les caractères XML réservés standard sont échappés par défaut dans les traductions livrées, avec une directive entity_escaping disponible lorsqu’un projet nécessite une gestion différente.
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 fournissant des traductions de la plus haute qualité, plus rapidement et à des coûts nettement inférieurs.