Auf dieser Seite

Lokalisierte Uhr mit Sprachumschaltung zur Laufzeit

Das Beispiel veranschaulicht bewährte Vorgehensweisen für die Nutzung der Übersetzungs- und Lokalisierungsfunktionen von Qt in CMake und Qt Quick, insbesondere das Ändern der Sprache einer Anwendung zur Laufzeit. Es baut auf dem einfacheren Beispiel „Lokalisierte Uhr“ auf.

Weitere Informationen zur Übersetzung von Qt-Anwendungen finden Sie im Handbuch „Qt Linguist “.

Benutzeroberfläche

Das Beispiel zeigt die aktuelle Uhrzeit und das aktuelle Datum in der Ländereinstellung und Sprache Ihres Systems an. Die Texte der Benutzeroberfläche sind außerdem für die folgenden Sprachen lokalisiert: Englisch, Deutsch, Französisch, Spanisch, Italienisch, Japanisch, Koreanisch, Portugiesisch, Arabisch und Chinesisch. Benutzer können außerdem über eine Menüschaltfläche verschiedene Sprachen und Ländereinstellungen auswählen.

Die englische Version der Anwendung:

Screenshot einer digitalen Uhr auf Englisch

Die deutsche Version nach der Änderung der Sprache zur Laufzeit:

Screenshot einer Digitaluhr auf Deutsch

Implementierung

Die Anwendung besteht aus vier Teilen:

CMakeLists.txt

Die CMake-Integration entspricht der CMake-Integration des Beispiels „Localized Clock “. Weitere Informationen finden Sie auf dieser Seite.

main.cpp

Der Einstiegspunkt der Anwendung, der für das Laden des QML-Moduls zuständig ist.

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();
}
Übersetzungsmanager (translator.h, translator.cpp)

TranslatorManager ist eine QML-Singleton-Klasse, die den Wechsel zwischen Sprachen und Ländereinstellungen zur Laufzeit verwaltet. Die zentrale Methode der Klasse ist ` TranslatorManager::switchLanguage()`, die eine Zeichenkette als Sprachcode entgegennimmt.

Während die Methode mit ` Q_INVOKABLE` gekennzeichnet ist, wird die Klasse `TranslatorManager` mit ` QML_ELEMENT ` und `QML_SINGLETON` deklariert. Dadurch kann direkt aus QML auf die Methode zugegriffen werden; siehe auch `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()));
    }
}
Übersetzungen zur Laufzeit aktualisieren

Beim Wechsel der Sprache wird die bisherige Übersetzung entfernt (QCoreApplication::removeTranslator()) und eine neue Übersetzung für die ausgewählte Sprache geladen (QTranslator::load()) und installiert (QCoreApplication::installTranslator()). QQmlEngine::retranslate() löst dann die Neuübersetzung der Strings im QML-Dokument aus.

Aktualisierung von Datums- und Zeitformaten

Ein Sprachwechsel kann sich auch auf die Darstellung von Datums- und Zeitangaben auswirken. Wenn beispielsweise QLocale auf Ihrem System für „en“ die Locale „en_US“ und für „de“ die Locale „de_DE“ bevorzugt:

  • Die Anwendung wird zunächst mit „US“ als Ländercode geladen.
  • Aufgrund der Konventionen der US-Lokalisierung wird das Datum im Format MM/TT/JJJJ angezeigt, und die Uhrzeit wird im 12-Stunden-Format dargestellt.
  • Nach dem Wechsel der Sprache auf Deutsch ist „de_DE“ die erste bevorzugte Locale für die deutsche Sprache, sodass das Land auf Deutschland wechselt.
  • Nach den deutschen Konventionen wird das Datum im Format TT.MM.JJJJ dargestellt und es wird das 24-Stunden-Format verwendet.

Beim Wechsel der Sprache aktualisiert die Anwendung ihre „ QLocale “ entsprechend der ausgewählten Sprache mithilfe von ` QLocale::setDefault()`. Bei der Darstellung der Uhrzeit sorgt die Funktion `Date.toLocaleTimeString()` dafür, dass Uhrzeit und Datum entsprechend der Locale der Anwendung lokalisiert werden (siehe Main.qml).

Main.qml

Die Haupt-QML-Datei definiert die Benutzeroberfläche der Anwendung. Die Benutzeroberfläche zeigt Uhrzeit, Datum und einen Zähler für Sekunden an. Informationen zur grundlegenden Übersetzung (Fenstertitel) und zur Behandlung von Pluralformen (Anzahl der Sekunden) finden Sie im Beispiel „Localized Clock “.

Bei Auswahl eines Eintrags aus der Liste „ Menu “ wird „ TranslatorManager.switchLanguage() “ mit dem entsprechenden Sprachcode aufgerufen. Dieser Aufruf sorgt auch für die Neuübersetzung der übersetzbaren Texte (siehe „Translator Manager“). Allerdings müssen wir bei einem Sprachwechsel dennoch „ updateClock() “ aufrufen, um die Zeitdarstellung im neuen Lokalisierungsformat zu aktualisieren.

        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()
                    }
                }
            }
        }

Beispielprojekt @ 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.