Exemple d'horloge localisée
Cet exemple présente les meilleures pratiques pour utiliser les fonctionnalités de traduction et de localisation de Qt dans CMake et Qt Quick, notamment la gestion des pluriels dans différentes langues, ainsi que les formats localisés d'heure et de date.
Consultez le manuelQt Linguist pour plus d'informations sur la traduction des applications Qt.
Interface utilisateur
Cet exemple affiche l'heure et la date actuelles selon les paramètres régionaux et la langue de votre système. Les textes de l'interface utilisateur sont en outre localisés dans les langues suivantes : anglais, allemand, français, espagnol, italien, japonais, coréen, portugais, arabe et chinois. Si votre bureau est configuré dans une autre langue, l'affichage se fait par défaut en anglais.
Pour tester différentes langues et paramètres régionaux sans modifier votre système, l’exemple accepte également un paramètre régional en tant qu’argument de ligne de commande. Par exemple, le lancement de `localizedClock` depuis la ligne de commande avec l’option ` --locale de ` affiche l’horloge en allemand, avec un format de date et d’heure conforme aux usages en Allemagne.
La capture d’écran montre la version en_US :

Internationalisation
Dans l'application, la traduction sert à définir le titre de la fenêtre principale et quelques textes de l'interface utilisateur, y compris ceux comportant des espaces réservés et des formes plurielles. L'application compte les secondes avec les formes plurielles activées (voir Gestion des formes plurielles). Par conséquent, en fonction du nombre de secondes, la fonction de traduction renvoie une traduction différente, avec le nombre grammatical correct pour la langue cible. Par exemple, en anglais, si le nombre est supérieur à un, la forme plurielle est utilisée ; sinon, c'est la forme singulière qui est utilisée. Vous trouverez les règles relatives au pluriel pour différentes langues dans la section « Règles de traduction pour les formes plurielles ».
Les paramètres régionaux influencent également l’affichage des dates et des heures. Celles-ci sont formatées selon les conventions nationales des paramètres régionaux actuels. Par exemple, les paramètres régionaux allemands utilisent le format 24 heures et placent le jour avant le mois, tandis que les paramètres régionaux américains utilisent le format 12 heures et placent le mois avant le jour.
Cette capture d’écran montre la version en_GB. Notez que le format des dates diffère de celui de la version en_US ci-dessus, alors que la même traduction au pluriel en anglais est chargée dans les deux cas.

Voici la capture d’écran de la version de_DE, qui, à l’instar de la version GB, présente un format de date différent de celui de la version US. Notez que la traduction allemande pour les formes au singulier et au pluriel est chargée en conséquence.

Mise en œuvre
La mise en œuvre comporte trois parties :
CMakeLists.txt
Le fichier CMake de l'application active la prise en charge de la traduction et de la localisation par Qt. Voici les extraits pertinents :
find_package(Qt6 REQUIRED COMPONENTS Core Linguist Qml Quick): Recherche et lie les modules Qt 6 requis, notamment Linguist, qui sont essentiels à l'internationalisation.
qt_standard_project_setup(...): Configure le système d’internationalisation avec la prise en charge des paramètres régionaux répertoriés. La variable ` I18N_SOURCE_LANGUAGE ` est conservée à sa valeur par défaut (anglais), car le code source contient des textes en anglais.
qt_standard_project_setup(REQUIRES 6.8
I18N_TRANSLATED_LANGUAGES de ar ko zh ja fr it es pt)qt_add_translations(...): Regroupe les fonctionnalités de lupdate et lrelease en générant les fichiers source de traduction (fichiers TS) dans le répertoire « i18n » en utilisant clock comme nom de base, puis en les compilant en fichiers binaires .qm s’ils contiennent des traductions. Les fichiers TS suivants sont générés :
- « clock_{de, ar, ko, zh, ja, fr, it, es, pt}.ts » : un fichier TS par langue répertoriée dans
I18N_TRANSLATED_LANGUAGESdeqt_standard_project_setup, contenant les traductions vers cette langue. - « clock_en.ts » : contient les formes plurielles en anglais, car le code source comporte une traduction au pluriel (« %n second(s) »). La fonction
qt_add_translationsn'écrit ici que les formes plurielles, car nous avons spécifié que la langue des textes dans le code source était l’anglais, en laissantI18N_SOURCE_LANGUAGEà sa valeur par défaut. Les textes normaux n’ont donc pas besoin d’être traduits.
qt_add_translations(localizedClock
TS_FILE_BASE i18n/clock
RESOURCE_PREFIX i18n
)qt_add_qml_module(...): Ajoute un module QML sous l’URI qtexamples.localizedclock, comprenant le fichier Main.qml.
qt_add_qml_module(localizedClock
URI qtexamples.localizedclock
VERSION 1.0
QML_FILES
Main.qml
)main.cpp
Point de départ de l'application. Cette partie est chargée de définir les paramètres régionaux, d'installer les traductions requises et de charger l'interface utilisateur. Vous trouverez ci-dessous une explication des extraits de code pertinents :
Définissez l’argument de paramètres régionaux, par exemple --locale en_US ou --locale de_DE:
QCommandLineParser parser;
QCommandLineOption localeOption("locale"_L1, "Locale to be used in the user interface"_L1,
"locale"_L1);
parser.addOption(localeOption);
parser.addHelpOption();
parser.process(app);Analyser les arguments, récupérer la locale fournie et définir la locale d'entrée comme locale par défaut de l'application :
QLocale locale(parser.value(localeOption));
qInfo() << "Setting locale to" << locale.name();
QLocale::setDefault(locale) ;Installe la traduction en anglais quelle que soit la locale, afin de permettre des traductions incomplètes pour les autres langues. La fonction QTranslator recherche les traductions des textes dans l'ordre inverse de celui dans lequel elles ont été installées :
QTranslator enPlurals;
const auto enPluralsPath = ":/i18n/clock_en.qm"_L1;
if (!enPlurals.load(enPluralsPath))
qFatal("Could not load %s!", qUtf8Printable(enPluralsPath));
app.installTranslator(&enPlurals);Installe une traduction en fonction des paramètres régionaux indiqués. La traduction en anglais ayant déjà été installée à l’étape précédente, il se peut que deux traductions soient installées à ce stade. Qt utilise la traduction la plus récemment installée pour toutes les clés qui se chevauchent. Par conséquent, la traduction spécifique aux paramètres régionaux prévaudra sur la version anglaise, et en cas de traductions manquantes, QTranslator reviendra à la version anglaise.
QTranslator translation;
if (QLocale().language() != QLocale::English) {
if (translation.load(QLocale(), "clock"_L1, "_"_L1, ":/i18n/"_L1)) {
qInfo("Loading translation %s",
qUtf8Printable(QDir::toNativeSeparators(translation.filePath())));
if (!app.installTranslator(&translation))
qWarning("Could not install %s!",
qUtf8Printable(QDir::toNativeSeparators(translation.filePath())));
} else {
qInfo("Could not load translation to %s. Using English.",
qUtf8Printable(QLocale().name()));
}
}Main.qml
Ce fichier QML définit la fenêtre principale de l'interface utilisateur de l'application, qui affiche l'heure, la date, les paramètres régionaux utilisés et un compteur de secondes. Vous trouverez ci-dessous une explication des éléments de code pertinents :
Définissez le titre de la fenêtre à l’aide de qsTr() pour la traduction. Pour trouver la traduction de ce texte, QTranslator interroge le fichier TS de la langue actuelle à la recherche du texte « Digital Clock » dans le contexte « Main » (le nom du fichier) :
title: qsTr("Digital Clock")Affichez le nombre de secondes à l’aide de qsTr() avec la prise en charge du pluriel (chiffres). La forme plurielle est activée en utilisant la notation spéciale « %n » (voir Gestion des formes plurielles). En fonction de la valeur de n, la fonction de traduction renvoie une traduction différente, avec le nombre grammatical correct pour la langue cible. Par exemple, en anglais, si la valeur de root.seconds est supérieure à un, la forme plurielle est utilisée ; sinon, c’est la forme singulière qui est employée. Vous trouverez les règles relatives au pluriel pour différentes langues dans la section « Règles de traduction pour les formes plurielles ».
text: qsTr("%n second(s)", "seconds", root.seconds)Affichez les paramètres régionaux actuels et utilisez qsTr() pour traduire le texte source « Locale : %1 ». La traduction doit également contenir la notation d’argument « %1 ». Ainsi, l’argument du texte (c’est-à-dire Qt.locale().name) peut être utilisé correctement pour formater le texte :
text: qsTr("Locale: %1").arg(Qt.locale().name)Mettez en forme l’heure et la date conformément aux conventions de la locale. Chaque pays peut avoir des préférences spécifiques quant à la manière dont l’heure et la date doivent être présentées. Par exemple, la locale allemande utilise un format de 24 heures et place le jour avant le mois, tandis que la locale américaine suit un format de 12 heures et place le mois avant le jour. La méthode Date.toLocaleTimeString tient compte de ces particularités et formate correctement l'heure et la date en fonction des paramètres régionaux fournis :
const now = new Date();
const locale = Qt.locale();
root.time = now.toLocaleTimeString(locale, Locale.ShortFormat);
root.date = now.toLocaleDateString(locale);© 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.