Sur cette page

QTranslator Class

La classe QTranslator fournit un support d'internationalisation pour la sortie de texte. Plus d'informations...

En-tête : #include <QTranslator>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Héritages : 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 la commande Qt Linguist.

L'utilisation la plus courante de QTranslator consiste à charger un fichier de traduction et à l'installer à l'aide de 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 de faire quoi que ce soit d'autre avec cette classe. Les autres fonctions fournies par cette classe sont utiles pour les applications qui travaillent sur des fichiers de traducteurs.

Recherche de traductions

Il est possible de rechercher une traduction en utilisant 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 de l'appelant tr().
  • Le texte source - généralement l'argument de tr().
  • La désambiguïsation - une chaîne facultative qui aide à désambiguïser les différentes utilisations du même texte dans le même contexte.

Par exemple, le mot "Cancel" dans une boîte de dialogue peut être remplacé par "Anuluj" lorsque le programme est exécuté 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 avec des paramètres pour l'impression recto-verso et la 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 désambiguïsations telles que "two-sided printing" pour l'un et "binding" pour l'autre. La désambiguïsation permet au traducteur de choisir le genre approprié pour la version espagnole et à Qt de faire la distinction entre les 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, c'est-à-dire que le fichier de traduction le plus récemment installé est recherché en premier et le fichier de traduction le plus ancien en dernier. La recherche s'arrête dès qu'une traduction contenant une chaîne de caractères 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 passant à la fonction QCoreApplication::removeTranslator() et de le réinstaller avec QCoreApplication::installTranslator(). Elle sera alors la première traduction à être recherchée pour les chaînes de caractères 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 sources de traduction textuels. Le format de ces fichiers binaires est strictement défini par Qt et toute manipulation des données du fichier binaire peut faire planter l'application lorsque le fichier est chargé. En outre, même les fichiers de traduction bien formés peuvent contenir des traductions trompeuses ou malveillantes.

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

Documentation sur les fonctions membres

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

Construit un objet de fichier de messages vide avec le parent parent qui n'est connecté à aucun fichier.

[virtual noexcept] QTranslator::~QTranslator()

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

QString QTranslator::filePath() const

Renvoie le chemin du fichier de traduction chargé.

Le chemin du 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 suffix n'est pas spécifié), 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 actuel est utilisé (c'est-à-dire comme 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.
  2. Nom de fichier avec suppression du texte après un caractère dans search_delimiters ("_." est la valeur par défaut pour search_delimiters s'il s'agit d'une chaîne vide) et suffix.
  3. Nom de fichier dépouillé sans suffix.
  4. Nom de fichier encore plus dépouillé, etc.

Par exemple, une application fonctionnant dans la locale fr_CA (Canada francophone) pourrait appeler load("foo.fr_ca", "/opt/foolib"). load() essaierait alors d'ouvrir le premier fichier lisible 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 fonction QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &), car elle utilise QLocale::uiLanguages() et pas simplement le nom de la locale, qui se réfère 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 (".qm" si suffix n'est pas spécifié), qui peut être un nom de fichier absolu ou relatif à directory. Renvoie true si la traduction a été chargée avec succès ; sinon, il renvoie false.

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.
  2. Nom de fichier avec la partie de la langue ui après le caractère "_" supprimée et suffix.
  3. Nom de fichier avec la partie de la langue ui dépouillée sans suffix annexé.
  4. Nom de fichier avec la partie de la langue de l'interface utilisateur dépouillée, etc.

Par exemple, une application fonctionnant sur locale avec les ui languages suivants - "es", "fr-CA", "de" pourrait appeler load(QLocale(), "foo", ".", "/opt/foolib", ".qm"). load() remplacerait "-" (tiret) par "_" (trait de soulignement) dans la langue de l'interface utilisateur et essaierait ensuite 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, 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 de longueur len dans le traducteur.

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

directory n'est utilisé que pour spécifier le répertoire de base lors du chargement des dépendances d'un fichier QM. Si le fichier n'a pas de dépendances, cet argument est ignoré.

Cette fonction surcharge QTranslator::load().

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

Renvoie la traduction de la clé (context, sourceText, disambiguation). Si aucune traduction n'est trouvée, il essaie également (context, sourceText, ""). En cas d'échec, il renvoie une chaîne de caractères nulle.

Remarque : les traductions incomplètes peuvent entraîner un comportement inattendu : Si aucune traduction pour (context, sourceText, "") n'est fournie, la méthode peut dans ce cas renvoyer une traduction pour un autre disambiguation.

Si n n'est pas -1, il est utilisé pour choisir une forme appropriée pour la traduction (par exemple, "%n file found" contre "%n files found").

Si vous avez besoin d'insérer par programme des traductions dans un site QTranslator, cette fonction peut être réimplémentée.

Remarque : cette fonction est à l'épreuve des threads.

Voir également 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.