Sur cette page

QTranslator Class

La classe QTranslator offre une prise en charge de l'internationalisation pour l'affichage du texte. En savoir plus…

En-tête : #include <QTranslator>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérite de : QObject

Fonctions publiques

QTranslator(QObject *parent = nullptr)
virtual ~QTranslator()
QString filePath() const
virtual bool isEmpty() const
QString language() const
bool load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
bool load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
bool load(const uchar *data, int len, const QString &directory = QString())
virtual QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const

Description détaillée

Un objet de cette classe contient un ensemble de traductions d’une langue source vers une langue cible. QTranslator fournit des fonctions permettant de rechercher des traductions dans un fichier de traduction. Les fichiers de traduction sont créés à l’aide de Qt Linguist.

L'utilisation la plus courante de QTranslator consiste à : charger un fichier de traduction, puis l'installer à l'aide de la fonction QCoreApplication::installTranslator().

Voici un exemple de fonction ` main() ` utilisant `QTranslator` :

// Required for using the '_L1' string literal.
using namespace Qt::StringLiterals;

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTranslator translator;
    // look up e.g. :/i18n/myapp_de.qm
    if (translator.load(QLocale(), "myapp"_L1, "_"_L1, ":/i18n"_L1))
        QCoreApplication::installTranslator(&translator);

    QPushButton hello(QCoreApplication::translate("main", "Hello world!"));
    hello.resize(100, 30);

    hello.show();
    return app.exec();
}

Notez que le traducteur doit être créé avant les widgets de l’application.

La plupart des applications n'auront jamais besoin d'utiliser cette classe à d'autres fins. Les autres fonctions fournies par cette classe sont utiles pour les applications qui traitent des fichiers de traduction.

Recherche de traductions

Il est possible de rechercher une traduction à l’aide de la fonction translate() (comme le font tr() et QCoreApplication::translate()). La fonction translate() prend jusqu’à trois paramètres :

  • Le contexte – généralement le nom de la classe appelant tr().
  • Le texte source – généralement l’argument de la fonction tr().
  • La désambiguïsation: une chaîne facultative qui permet de distinguer les différentes utilisations d’un même texte dans un même contexte.

Par exemple, le bouton « Cancel » d’une boîte de dialogue peut s’afficher sous la forme « Anuluj » lorsque le programme s’exécute en polonais (dans ce cas, le texte source serait « Cancel »). Le contexte serait (normalement) le nom de la classe de la boîte de dialogue ; il n’y aurait normalement pas de commentaire, et le texte traduit serait « Anuluj ».

Mais ce n’est pas toujours aussi simple. La version espagnole d’une boîte de dialogue d’imprimante proposant des paramètres d’impression recto-verso et de reliure nécessiterait probablement à la fois « Activado » et « Activada » comme traductions de « Enabled ». Dans ce cas, le texte source serait « Enabled » dans les deux cas, et le contexte serait le nom de classe de la boîte de dialogue, mais les deux éléments auraient des précisions telles que « impression recto-verso » pour l’un et « reliure » pour l’autre. Cette clarification permet au traducteur de choisir le genre approprié pour la version espagnole et permet à Qt de distinguer les différentes traductions.

Utilisation de plusieurs traductions

Plusieurs fichiers de traduction peuvent être installés dans une application. Les traductions sont recherchées dans l’ordre inverse de leur installation : le fichier de traduction installé le plus récemment est donc consulté en premier, et le plus ancien en dernier. La recherche s’arrête dès qu’une traduction contenant une chaîne correspondante est trouvée.

Ce mécanisme permet de « sélectionner » une traduction spécifique ou de lui donner la priorité sur les autres ; il suffit de désinstaller le traducteur de l’application en le transmettant à la fonction ` QCoreApplication::removeTranslator()` et de le réinstaller avec ` QCoreApplication::installTranslator()`. Il sera alors la première traduction à être consultée pour rechercher des chaînes correspondantes.

Considérations de sécurité

N’installez que des fichiers de traduction provenant de sources fiables.

Les fichiers de traduction sont des fichiers binaires générés à partir de fichiers source de traduction au format texte. Le format de ces fichiers binaires est strictement défini par Qt et toute manipulation des données contenues dans le fichier binaire peut entraîner le plantage de l’application lors du chargement du fichier. De plus, même des fichiers de traduction correctement formés peuvent contenir des traductions trompeuses ou malveillantes.

Voir également QCoreApplication::installTranslator(), QCoreApplication::removeTranslator(), QObject::tr(), QCoreApplication::translate(), Exemple d’horloge localisée, Exemple de pavé fléché et Exemple d’impression Troll.

Documentation des fonctions membres

[explicit] QTranslator::QTranslator(QObject *parent = nullptr)

Crée un objet de fichier de messages vide dont l'parent parent n'est associé à aucun fichier.

[virtual noexcept] QTranslator::~QTranslator()

Détruit l'objet et libère toutes les ressources allouées.

QString QTranslator::filePath() const

Renvoie le chemin d'accès du fichier de traduction chargé.

Le chemin d'accès au fichier est vide si aucune traduction n'a encore été chargée, si le chargement a échoué ou si la traduction n'a pas été chargée à partir d'un fichier.

[virtual] bool QTranslator::isEmpty() const

Renvoie « true » si ce traducteur est vide, sinon renvoie « false ».

QString QTranslator::language() const

Renvoie la langue cible telle qu'elle est enregistrée dans le fichier de traduction.

bool QTranslator::load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())

Charge filename + suffix (".qm" si l'suffix n'est pas spécifiée), qui peut être un nom de fichier absolu ou relatif à directory. Renvoie true si la traduction est chargée avec succès ; sinon, renvoie false.

Si directory n’est pas spécifié, le répertoire courant est utilisé (c’est-à-dire sous la forme currentPath()).

Le contenu précédent de cet objet traducteur est supprimé.

Si le nom de fichier n'existe pas, d'autres noms de fichiers sont essayés dans l'ordre suivant :

  1. Nom de fichier sans « suffix » ajouté à la fin.
  2. Nom de fichier dont le texte situé après un caractère de search_delimiters a été supprimé (« _. » est la valeur par défaut pour search_delimiters s’il s’agit d’une chaîne vide) et suffix.
  3. Nom de fichier sans l’ suffix.
  4. Nom de fichier encore plus raccourci, etc.

Par exemple, une application s'exécutant dans la locale fr_CA (Canada francophone) pourrait appeler load("foo.fr_ca", "/opt/foolib"). La fonction load() tenterait alors d'ouvrir le premier fichier lisible existant de cette liste :

  1. /opt/foolib/foo.fr_ca.qm
  2. /opt/foolib/foo.fr_ca
  3. /opt/foolib/foo.fr.qm
  4. /opt/foolib/foo.fr
  5. /opt/foolib/foo.qm
  6. /opt/foolib/foo

En général, il est préférable d’utiliser à la place la fonction QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &), car elle utilise QLocale::uiLanguages() et non pas simplement le nom de la locale, qui fait référence au formatage des dates et des nombres et pas nécessairement à la langue de l’interface utilisateur.

bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())

Charge filename + prefix + ui language name + suffix (avec l'extension « .qm » si l'suffix n'est pas spécifiée), qui peut être un nom de fichier absolu ou relatif à directory. Renvoie true si la traduction est chargée avec succès ; sinon, renvoie false.

Le contenu précédent de cet objet traducteur est ignoré.

Si le nom de fichier n’existe pas, d’autres noms de fichiers sont essayés dans l’ordre suivant :

  1. Nom de fichier sans l’extension « suffix ».
  2. Nom de fichier dont la partie correspondant à la langue de l'interface, située après le caractère « _ », a été supprimée, suivi de « suffix ».
  3. Nom de fichier dont la partie relative à la langue de l’interface a été supprimée, sans ajout de « suffix ».
  4. Nom de fichier dont la partie relative à la langue de l'interface utilisateur a été supprimée davantage, etc.

Par exemple, une application s'exécutant dans l'locale avec l'ui languages e suivante : « es », « fr-CA », « de » pourrait appeler load(QLocale(), « foo », « . », « /opt/foolib », « .qm »). La fonction load() remplacerait le « - » (tiret) par un « _ » (trait de soulignement) dans la langue de l’interface utilisateur, puis tenterait d’ouvrir le premier fichier lisible existant de cette liste :

  1. /opt/foolib/foo.es.qm
  2. /opt/foolib/foo.es
  3. /opt/foolib/foo.fr_CA.qm
  4. /opt/foolib/foo.fr_CA
  5. /opt/foolib/foo.fr.qm
  6. /opt/foolib/foo.fr
  7. /opt/foolib/foo.de.qm
  8. /opt/foolib/foo.de
  9. /opt/foolib/foo.qm
  10. /opt/foolib/foo.
  11. /opt/foolib/foo

Sur les systèmes d’exploitation où le système de fichiers est sensible à la casse, la fonction ` QTranslator ` tente également de charger une version en minuscules du nom de la locale.

bool QTranslator::load(const uchar *data, int len, const QString &directory = QString())

Charge les données du fichier QM data, d'une longueur de len, dans le traducteur.

Les données ne sont pas copiées. L’appelant doit pouvoir garantir que le fichier data ne sera ni supprimé ni modifié.

directory est uniquement utilisé pour spécifier le répertoire de base lors du chargement des dépendances d’un fichier QM. Si le fichier ne comporte pas de dépendances, cet argument est ignoré.

Cette fonction surcharge la méthode QTranslator::load().

[virtual] QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const

Renvoie la traduction correspondant à la clé (context, sourceText, disambiguation). Si aucune traduction n'est trouvée, la fonction tente également (context, sourceText, ""). Si cela échoue également, elle renvoie une chaîne vide.

Remarque : des traductionsincomplètes peuvent entraîner un comportement inattendu : si aucune traduction n’est fournie pour (context, sourceText, ""), la méthode pourrait dans ce cas renvoyer une traduction correspondant à un autre disambiguation.

Si n n’est pas égal à -1, il est utilisé pour choisir une forme appropriée pour la traduction (par exemple « %n fichier trouvé » ou « %n fichiers trouvés »).

Si vous avez besoin d’insérer des traductions par programmation dans un objet ` QTranslator`, cette fonction peut être réimplémentée.

Remarque : cette fonction est sûre pour les threads.

Voir aussi load().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.