Exemple d'impression de trolls
Mise à jour des traductions pour les versions ultérieures.
Troll Print est un exemple d'application qui permet à l'utilisateur de choisir les paramètres de l'imprimante. Elle existe en deux versions : anglais et portugais.

Nous avons inclus un fichier de traduction, trollprint_pt.ts, qui contient quelques traductions en portugais pour cet exemple.
Nous allons examiner deux versions de la même application : Troll Print 1.0 et 1.1. Nous apprendrons à réutiliser les traductions créées pour une version dans une version ultérieure. (Dans ce tutoriel, vous devez éditer certains fichiers sources. Il est probablement préférable de copier tous les fichiers dans un nouveau répertoire temporaire et de travailler à partir de là).
Voir le manuelQt Linguist pour plus d'informations sur la traduction des applications Qt.
Visite guidée ligne par ligne
La classe PrintPanel est définie dans printpanel.h.
class PrintPanel : public QWidget { Q_OBJECT
PrintPanel Elle est une QWidget et a besoin de la macro Q_OBJECT pour que tr() fonctionne correctement.
Le fichier d'implémentation est printpanel.cpp.
PrintPanel::PrintPanel(QWidget *parent) : QWidget(parent) { /* QLabel *label = new QLabel(tr("<b>TROLL PRINT</b>")); label->setAlignment(Qt::AlignCenter); */
Une partie du code est commentée dans Troll Print 1.0 ; vous la décompresserez plus tard, pour Troll Print 1.1.
twoSidedGroupBox = new QGroupBox(tr("2-sided")); twoSidedEnabledRadio = new QRadioButton(tr("Enabled")); twoSidedDisabledRadio = new QRadioButton(tr("Disabled")); twoSidedDisabledRadio->setChecked(true); colorsGroupBox = new QGroupBox(tr("Colors")); colorsEnabledRadio = new QRadioButton(tr("Enabled")); colorsDisabledRadio = new QRadioButton(tr("Disabled"));
Remarquez les deux occurrences de tr("Enabled") et de tr("Disabled") dans PrintPanel. Puisque les "Enabled" et les "Disabled" apparaissent dans le même contexte Qt Linguist n'affichera qu'une occurrence de chaque et utilisera les mêmes traductions pour les doublons qu'il n'affichera pas. Cela permet de gagner du temps, mais dans certaines langues, comme le portugais, la deuxième occurrence nécessite une traduction distincte. Nous verrons comment Qt Linguist peut afficher toutes les occurrences pour une traduction séparée.
Le fichier d'en-tête de MainWindow, mainwindow.h, ne contient aucune surprise. Dans la mise en œuvre, mainwindow.cpp, nous avons quelques textes sources visibles par l'utilisateur qui doivent être marqués pour la traduction.
setWindowTitle(tr("Troll Print %1").arg(version));
Nous devons traduire le titre de la fenêtre.
void MainWindow::createActions() { exitAct = new QAction(tr("E&xit"), this); exitAct->setShortcut(tr("Ctrl+Q", "Quit")); connect(exitAct, &QAction::triggered, this, &MainWindow::close); aboutAct = new QAction(tr("&About"), this); aboutAct->setShortcut(Qt::Key_F1); connect(aboutAct, &QAction::triggered, this, &MainWindow::about); aboutQtAct = new QAction(tr("About &Qt"), this); connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt); } void MainWindow::createMenus() { QMenu *fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(exitAct); menuBar()->addSeparator(); QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(aboutAct); helpMenu->addAction(aboutQtAct); }
Nous devons également traduire les actions et les menus. Notez que la forme à deux arguments de tr() est utilisée pour l'accélérateur de clavier "Ctrl+Q", car le deuxième argument est le seul indice dont dispose le traducteur pour indiquer la fonction de l'accélérateur.
QTranslator translator; if (translator.load(locale, u"trollprint"_s, u"_"_s)) app.installTranslator(&translator);
La fonction main() de main.cpp est la même que celle de l'exemple Arrow Pad. En particulier, elle choisit un fichier de traduction en fonction de la langue locale actuelle.
Exécution de Troll Print 1.0 en anglais et en portugais
Nous utiliserons les traductions du fichier trollprint_pt.ts fourni.
Définissez la variable d'environnement LANG à pt, puis exécutez trollprint. Vous devriez toujours voir la version anglaise. Exécutez maintenant lrelease, par exemple lrelease trollprint.pro, puis relancez l'exemple. Vous devriez maintenant voir la version portugaise (Troll Imprimir 1.0) :

Bien que la traduction apparaisse correctement, elle est en fait erronée. En bon portugais, la deuxième occurrence de "Enabled" devrait être "Ativadas", et non "Ativado", et la fin de la deuxième traduction de "Disabled" doit être modifiée de la même manière.
Si vous ouvrez le site trollprint_pt.ts en utilisant Qt Linguistvous verrez qu'il n'y a qu'une seule occurrence de "Enabled" et de "Disabled" dans le fichier source de la traduction, alors qu'il y en a deux dans le code source. Cela s'explique par le fait que Qt Linguist essaie de minimiser le travail du traducteur en utilisant la même traduction pour les textes sources dupliqués. Dans les cas où une traduction identique est erronée, le programmeur doit désambiguïser les occurrences en double. Ceci est facilement réalisable en utilisant la forme à deux arguments de tr().
Nous pouvons facilement déterminer quel fichier doit être modifié car le "contexte" du traducteur est en fait le nom de la classe dans laquelle apparaissent les textes qui doivent être modifiés. Dans le cas présent, il s'agit du fichier printpanel.cpp, dans lequel il y a quatre lignes à modifier. Ajoutez le deuxième argument "two-sided" dans les appels tr() appropriés à la première paire de boutons radio :
twoSidedEnabledRadio = new QRadioButton(tr("Enabled", "two-sided")); twoSidedDisabledRadio = new QRadioButton(tr("Disabled", "two-sided"));
et ajoutez le deuxième argument "colors" dans les appels appropriés de tr() pour la deuxième paire de boutons radio :
colorsEnabledRadio = new QRadioButton(tr("Enabled", "colors"), colors); colorsDisabledRadio = new QRadioButton(tr("Disabled", "colors"), colors);
Maintenant, recompilez, exécutez lupdate et ouvrez trollprint_pt.ts avec Qt Linguist. Vous devriez maintenant constater deux changements.
Premièrement, le fichier source de la traduction contient maintenant trois paires "Enabled", "Disabled". La première paire est marquée "(obs.)", ce qui signifie qu'elle est obsolète. Cela s'explique par le fait que ces textes figuraient dans des appels tr() qui ont été remplacés par de nouveaux appels avec deux arguments. La deuxième paire a pour commentaire "two-sided" et la troisième paire a pour commentaire "colors". Les commentaires sont affichés dans la zone Source text and comments de la page Qt Linguist.
Deuxièmement, les traductions "Ativado" et "Desativado" ont été automatiquement utilisées pour les nouveaux textes "Enabled" et "Disabled", toujours dans le but de minimiser le travail du traducteur. Bien sûr, dans ce cas, ces traductions ne sont pas correctes pour la deuxième occurrence de chaque mot, mais elles constituent un bon point de départ.
Remplacez le deuxième "Ativado" par "Ativadas" et le deuxième "Desativado" par "Desativadas", puis enregistrez et quittez. Exécutez lrelease pour obtenir un fichier binaire trollprint_pt.qm à jour, et lancez Troll Print (ou plutôt Troll Imprimir).

Le deuxième argument des appels à tr(), appelé "commentaires" dans Qt Linguistpermet de distinguer les textes sources identiques qui se trouvent dans le même contexte (classe). Ils sont également utiles dans d'autres cas pour donner des indices au traducteur, et dans le cas des accélérateurs de touches Ctrl, ils sont le seul moyen de transmettre au traducteur la fonction exécutée par l'accélérateur.
Un autre moyen d'aider le traducteur est de lui fournir des informations sur la manière de naviguer vers la partie particulière de l'application qui contient les textes sources qu'il doit traduire. Cela lui permet de voir le contexte dans lequel la traduction apparaît et l'aide également à trouver et à tester les traductions. Ceci peut être réalisé en utilisant un commentaire TRANSLATOR dans le code source :
/*
TRANSLATOR MainWindow
In this application the whole application is a MainWindow.
Choose Help|About from the menu bar to see some text
belonging to MainWindow.
...
*/Essayez d'ajouter ces commentaires à certains fichiers source, en particulier aux classes de dialogue, en décrivant la navigation nécessaire pour atteindre les dialogues. Vous pouvez également les ajouter aux fichiers d'exemple, par exemple mainwindow.cpp et printpanel.cpp sont des fichiers appropriés. Exécutez lupdate, puis lancez Qt Linguist et chargez trollprint_pt.ts. Vous devriez voir les commentaires dans la zone Source text and comments lorsque vous parcourez la liste des textes sources.
Parfois, en particulier dans le cas de programmes volumineux, il peut être difficile pour le traducteur de retrouver ses traductions et de vérifier qu'elles sont correctes. Les commentaires qui fournissent de bonnes informations de navigation peuvent leur faire gagner du temps :
/*
TRANSLATOR ZClientErrorDialog
Choose Client|Edit to reach the Client Edit dialog, then choose
Client Specification from the drop down list at the top and pick
client Bartel Leendert van der Waerden. Now check the Profile
checkbox and then click the Start Processing button. You should
now see a pop up window with the text "Error: Name too long!".
This window is a ZClientErrorDialog.
*/Troll Print 1.1
Nous allons maintenant préparer la version 1.1 de Troll Print. Lancez votre éditeur de texte préféré et suivez les étapes suivantes :
- Décommentez les deux lignes qui créent un QLabel avec le texte "<b>TROLL PRINT</b>" dans
printpanel.cpp. - Mise en ordre des mots : Remplacez "2-sided" par "Two-sided" dans
printpanel.cpp. - Remplacer "1.0" par "1.1" partout où il apparaît dans
mainwindow.cpp. - Mettre à jour l'année de copyright à 1999-2000 dans
mainwindow.cpp.
(Bien entendu, le numéro de version et l'année de copyright seraient des consts ou des #defines dans une application réelle).
Une fois terminé, exécutez lupdate, puis ouvrez trollprint_pt.ts dans Qt Linguist. Les éléments suivants présentent un intérêt particulier :
PrintPanel- 2 faces - marquées "(obs.)", obsolètes
- <b>TROLL PRINT</b> - non marqué, c'est-à-dire non traduit
- Recto-verso - non marqué, c'est-à-dire non traduit.
Pour faciliter les révisions, au lieu de tr("Troll Print 1.0"), vous pouvez utiliser tr("Troll Print %1").arg("1.0") ou autre pour éviter d'avoir à mettre à jour la chaîne à chaque version.
Passez en revue les traductions dans MainWindow et marquez-les comme "faites". Traduisez "<b>TROLL PRINT</b>" par "<b>TROLL IMPRIMIR</b>". Lorsque vous traduisez "Two-sided", appuyez sur le bouton Guess Again pour traduire "Two-sided", mais remplacez le "2" par "Dois".
Sauvegardez et quittez, puis exécutez lrelease. La version portugaise devrait ressembler à ceci :

Choisissez Ajuda|Sobre (Help|About) pour voir la boîte "about".
Si vous choisissez Ajuda|Sobre Qt (Help|About Qt), vous obtiendrez une boîte de dialogue en anglais. Oups ! Qt lui-même doit être traduit. Voir Internationalisation avec Qt pour plus de détails.
Définissez maintenant LANG=en pour obtenir la version anglaise originale :

© 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.