Sur cette page

Exemple d'horloge localisée

L'exemple montre les meilleures pratiques pour utiliser les fonctionnalités de traduction et de localisation de Qt XML dans CMake et Qt Quick, y compris la gestion des pluriels dans différentes langues, et les formats d'heure et de date localisés.

Voir le manuelQt Linguist pour plus d'informations sur la traduction des applications Qt.

Interface utilisateur

L'exemple montre l'heure et la date actuelles dans la langue locale 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 dans une autre langue, il revient à l'anglais.

Pour tester différentes langues et locales sans modifier votre système, l'exemple accepte également une locale comme argument de ligne de commande. Par exemple, si vous lancez localizedClock à partir de la ligne de commande avec l'option --locale de, l'horloge s'affiche en allemand, avec un format de date et d'heure tel qu'il est courant en Allemagne.

La capture d'écran montre la version en_US :

Capture d'écran de l'horloge numérique en anglais (US)

Internationalisation

Dans l'application, la traduction est utilisée pour définir le titre de la fenêtre principale et quelques textes de l'interface utilisateur, y compris ceux qui contiennent des espaces réservés et des formes plurielles. L'application compte les secondes lorsque les formes plurielles sont activées (voir Gérer les 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 la forme singulière est utilisée. Dans Règles de traduction pour les formes plurielles, vous trouverez les règles du pluriel pour différentes langues.

Les paramètres locaux influencent également l'affichage des dates et des heures. Celles-ci sont formatées en fonction des conventions nationales de la locale en cours. Par exemple, en Allemagne, l'heure est de 24 heures et le jour est écrit avant le mois, tandis qu'aux États-Unis, l'heure est de 12 heures et le mois est écrit avant le jour.

Cette capture d'écran montre la version en_GB. Notez que le format des données est différent de celui de la version en_US ci-dessus, alors que la même traduction anglaise plurielle est chargée dans les deux cas.

Capture d'écran d'une horloge numérique en anglais (UK)

Voici la capture d'écran de la version de_DE, qui, comme la version GB, a un format de date différent de celui de la version US. Notez que la traduction allemande pour les formes régulières et plurielles est chargée en conséquence.

Capture d'écran de l'horloge numérique en allemand

Mise en œuvre

L'implémentation comporte trois parties :

CMakeLists.txt

Le fichier CMake de l'application active le support de traduction et de localisation de Qt. Voici les éléments pertinents :

find_package(Qt6 REQUIRED COMPONENTS Core Linguist Qml Quick): Trouve et lie les modules Qt 6 requis, y compris Linguist qui sont essentiels pour l'internationalisation.

qt_standard_project_setup(...): Met en place le système d'internationalisation avec le support des locales listées. I18N_SOURCE_LANGUAGE est laissé à sa valeur par défaut (English), puisque 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 sources de traduction (fichiers TS) dans le répertoire "i18n" en utilisant clock comme nom de base, et 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 listée dans I18N_TRANSLATED_LANGUAGES de qt_standard_project_setup contenant les traductions pour cette langue.
  • "clock_en.ts" : Contient les formes plurielles anglaises, puisque le code source contient une traduction des formes plurielles ("%n second(s)"). La fonction qt_add_translations n'écrit ici que les formes plurielles, car nous avons spécifié que la langue des textes dans le code source était l'anglais, en laissant la valeur par défaut à I18N_SOURCE_LANGUAGE. Les textes réglulaires 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, y compris 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 responsable de la définition des paramètres linguistiques, de l'installation des traductions requises et du chargement de l'interface utilisateur. Vous trouverez ci-dessous une explication des éléments de code pertinents :

Définir l'argument de la locale, 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);

Analyse les arguments, recherche la locale fournie et définit 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 anglaise indépendamment de la locale, pour permettre des traductions incomplètes dans d'autres langues. QTranslator interroge les traductions pour les textes dans l'ordre inverse de l'installation des traductions :

    QTranslator enPlurals ; const auto enPluralsPath = ":/i18n/clock_fr.qm"_L1 ; if (!enPlurals.load(enPluralsPath))        qFatal("Could not load %s!", qUtf8Printable(enPluralsPath));
    app.installTranslator(&enPlurals) ;

Installe une traduction en fonction de la locale donnée. Comme la traduction anglaise est déjà installée dans l'étape précédente, nous pourrions nous retrouver avec deux traductions installées ici. Qt utilise la dernière traduction installée pour toutes les clés qui se chevauchent. Par conséquent, la traduction spécifique à la locale aura la priorité sur l'anglais, et en cas de traduction manquante, QTranslator se rabat sur l'anglais.

    QTranslator traduction ; 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'application, qui présente l'heure, la date, la langue utilisée et un compteur de secondes. Vous trouverez ci-dessous une explication des éléments de code pertinents :

Définir le titre de la fenêtre en utilisant qsTr() pour la traduction. Pour trouver la traduction de ce texte, QTranslator recherche dans le fichier TS de la langue courante le texte "Digital Clock" dans le contexte "Main" (le nom du fichier) :

title: qsTr("Digital Clock")

Afficher le nombre de secondes en utilisant qsTr() avec le support du pluriel (numéral). 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 la forme singulière est utilisée. Dans Règles de traduction pour les formes plurielles, vous trouverez les règles du pluriel pour différentes langues.

text: qsTr("%n second(s)", "seconds", root.seconds)

Affichez la locale actuelle et utilisez qsTr() pour traduire le texte source "Locale : %1". La traduction doit également contenir la notation de l'argument "%1". Par conséquent, l'argument du texte (c'est-à-dire Qt.locale().name) peut être correctement utilisé pour formater le texte :

text: qsTr("Locale: %1").arg(Qt.locale().name)

Formater l'heure et la date en fonction des conventions locales. Différents pays peuvent avoir des préférences spécifiques sur la manière dont l'heure et la date doivent être présentées. Par exemple, la locale allemande utilise une horloge de 24 heures et écrit le jour avant le mois, alors que la locale américaine suit une horloge de 12 heures et place le mois avant le jour. La méthode Date.toLocaleTimeString tient compte de ces considérations et formate l'heure et la date correctement en fonction de la locale donnée :

            const now = new Date();
            const locale = Qt.locale();
            root.time = now.toLocaleTimeString(locale, Locale.ShortFormat);
            root.date = now.toLocaleDateString(locale);

Exemple de projet @ code.qt.io

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