Sur cette page

Horloge localisée avec changement de langue en cours d'exécution

L'exemple démontre les meilleures pratiques pour utiliser les fonctionnalités de traduction et de localisation de Qt dans CMake et Qt Quicken particulier pour changer la langue d'une application pendant l'exécution. Il étend l'exemple plus simple de l'horloge localisée.

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 et les paramètres régionaux de votre système. Les textes de l'interface utilisateur sont également localisés dans les langues suivantes : anglais, allemand, français, espagnol, italien, japonais, coréen, portugais, arabe et chinois. Les utilisateurs peuvent également utiliser un bouton de menu pour sélectionner différentes langues et locales.

La version anglaise de l'application :

Capture d'écran d'une horloge numérique en anglais

La version allemande après modification de la langue au moment de l'exécution :

Capture d'écran d'une horloge numérique en allemand

Mise en œuvre

L'application comporte quatre parties :

CMakeLists.txt

L'intégration CMake est la même que celle de l'exemple de l'horloge localisée. Veuillez vous référer à cette page pour plus de détails.

main.cpp

Le point de départ de l'application, responsable du chargement du module QML.

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    QObject::connect(
            &engine, &QQmlApplicationEngine::objectCreationFailed, &app,
            [](const QUrl &) { QCoreApplication::exit(-1); }, Qt::QueuedConnection);
    engine.loadFromModule("qtexamples.localizedclockswitchlocale", "Main");
    return app.exec();
}
Gestionnaire de traducteurs (translator.h, translator.cpp)

TranslatorManager est une classe QML singleton qui gère le changement de langue et de locale au moment de l'exécution. La méthode centrale de la classe est TranslatorManager::switchLanguage(), qui accepte une chaîne de caractères représentant un code de langue.

Alors que la méthode est marquée par Q_INVOKABLE, la classe TranslatorManager est déclarée avec QML_ELEMENT et QML_SINGLETON. Cela permet d'accéder directement à la méthode à partir de QML ; voir également Main.qml.

void TranslatorManager::switchLanguage(const QString &lang) { QLocale locale(lang) ; QLocale::setDefault(locale) ;    qApp->removeTranslator(&m_translator); // not necessary from Qt 6.10
   if (m_translator.load(locale, "clock"_L1, "_"_L1, ":/i18n/"_L1) && qApp->installTranslator(&m_translator)) { m_engine.retranslate() ; } else {        qWarning("Could not load translation to %s!", qPrintable(locale.name()));
    } }
Mise à jour des traductions au moment de l'exécution

Lors du changement de langue, la traduction précédente est supprimée (QCoreApplication::removeTranslator()) et une nouvelle traduction pour la langue sélectionnée est chargée (QTranslator::load()) et installée (QCoreApplication::installTranslator()). QQmlEngine::retranslate() déclenche alors la retraduction des chaînes de caractères dans le document QML.

Mise à jour des formats de date et d'heure

Le changement de langue peut également affecter l'affichage des dates et des heures. Par exemple, si QLocale sur votre système préfère la locale "en_US" pour "en", et "de_DE" pour "de" :

  • L'application est initialement chargée avec "US" comme code pays.
  • En raison des conventions locales américaines, la date est présentée au format MM/JJ/AAAA et l'heure utilise une horloge de 12 heures.
  • Après avoir changé la langue en allemand, "de_DE" est la première locale préférée pour la langue allemande, et le pays devient donc l'Allemagne.
  • Les conventions allemandes présentent la date au format JJ.MM.AAAA et utilisent une horloge de 24 heures.

Lors du changement de langue, l'application met à jour son site QLocale en fonction de la langue sélectionnée à l'aide de QLocale::setDefault(). Lors de la représentation de l'heure, la fonction Date.toLocaleTimeString() se charge de localiser l'heure et la date en fonction de la locale de l'application (voir Main.qml).

Main.qml

Le fichier QML principal définit l'interface utilisateur de l'application. L'interface utilisateur présente l'heure, la date et un compteur de secondes. Pour la traduction de base (titre de la fenêtre) et la gestion du pluriel (nombre de secondes), veuillez vous référer à l'exemple de l'horloge localisée.

Lors de la sélection d'un élément sur le site Menu, TranslatorManager.switchLanguage() est appelé avec le code de langue correspondant. Cet appel se charge également de retraduire les textes traduisibles (voir Translator Manager). Cependant, nous devons encore appeler updateClock() pour mettre à jour la représentation de l'heure dans le nouveau format de localisation lorsque la langue est modifiée.

        ListModel {
            id: languageModel
            ListElement { name: "English"; code: "en" }
            ListElement { name: "Deutsch"; code: "de" }
            ListElement { name: "العربية"; code: "ar" }
            ListElement { name: "한국어"; code: "ko" }
            ListElement { name: "中文"; code: "zh" }
            ListElement { name: "日本語"; code: "ja" }
            ListElement { name: "Français"; code: "fr" }
            ListElement { name: "Italiano"; code: "it" }
            ListElement { name: "Español"; code: "es" }
            ListElement { name: "Português"; code: "pt" }
        }
        Menu {
            id: languageMenu
            width: languageButton.width
            Repeater {
                model: languageModel
                delegate: MenuItem {
                    required property string name
                    required property string code
                    text: name
                    onTriggered: {
                        TranslatorManager.switchLanguage(code)
                        root.selectedLanguage = name
                        root.updateClock()
                    }
                }
            }
        }

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.