Smartling nommé chef de file dans The Forrester Wave™ : services de localisation, 3e trimestre 2026.
Smartling nommé Leader dans The Forrester Wave™

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-classe QObject englobante (définie via la macro Q_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. lupdate doit être réexécutée à chaque modification des chaînes sources, et une chaîne située en dehors d'un appel tr()/qsTr() nécessite la macro QT_TR_NOOP() ou QT_TRANSLATE_NOOP() appropriée pour être prise en compte ; si la macro est omise, la chaîne est silencieusement absente du fichier .ts fichier, même s'il est toujours retourné dans l'application en cours d'exécution.
  • Manipulation au pluriel. La syntaxe plurielle de %n Qt et la numerus="yes" structure / numerusform dans le .ts né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 .ts Le 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 .ts Le contenu n’atteint les utilisateurs qu’après lrelease l’avoir compilé en binaire .qm et 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 _NOOP correspondante afin que lupdate puisse la trouver, et ajouter Q_OBJECT (ou Q_DECLARE_TR_FUNCTIONS pour une classe nonQObject ) afin que Qt Linguist dispose d'un véritable contexte de traduction pour regrouper les chaînes.
  • Extraction – exécuter lupdate directement sur le code source C++ et QML, ou via CMake qt_add_translations, pour en générer ou mettre à jour un .ts Fichier par localisation cible tout en préservant les traductions déjà existantes.
  • Traduction - ouvrir le .ts Sauvegardez 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 .ts nativement sous un type de fichier qt dédié et conserve les espaces réservés numérotés %1/%2 et les entrées plurielles numerus/numerusform verrouillées en tant que données structurées plutôt qu'en tant que texte modifiable.
  • Compilation - exécutez lrelease pour compiler chaque fichier .ts traduit fichier dans un fichier binaire .qm fichier ; il s'agit d'une étape de compilation obligatoire, et non d'un emballage optionnel.
  • Chargement à l'exécution - installez le fichier .qm correspondant le fichier via QTranslator en C++ ou le chargement automatique de QQmlApplicationEngine en QML, et gérer l'événement QEvent::LanguageChange si l'application doit changer de langue sans redémarrer.

Gestion des fichiers Qt Linguist : spécifications techniques

ItemDé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 Smartlingqt
Taille maximale de fichier (Smartling)10MB
Soutien des formes pluriellesOriginaire — Smartling lit l'attribut numerus="oui" et les éléments numerusform. Qt Linguist écrit
Format provisoireL’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 localsmartling.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 ?

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.