En esta página

Reloj localizado con cambio de idioma en tiempo de ejecución

El ejemplo demuestra las mejores prácticas para usar las características de traducción y localización de Qt en CMake y Qt Quicken particular para cambiar el idioma de una aplicación en tiempo de ejecución. Extiende el ejemplo más simple de Reloj Localizado.

Consulte el ManualQt Linguist para obtener más información sobre la traducción de aplicaciones Qt.

Interfaz de usuario

El ejemplo muestra la hora y la fecha actuales en la configuración regional y el idioma de su sistema. Los textos de la interfaz de usuario también están localizados para los siguientes idiomas: Inglés, alemán, francés, español, italiano, japonés, coreano, portugués, árabe y chino. Los usuarios también pueden utilizar un botón de menú para seleccionar distintos idiomas y configuraciones regionales.

La versión inglesa de la aplicación:

Captura de pantalla de un reloj digital en inglés

La versión alemana después de cambiar el idioma en tiempo de ejecución:

Captura de pantalla de un reloj digital en alemán

La aplicación

La aplicación consta de cuatro partes:

CMakeLists.txt

La integración CMake es la misma que la integración CMake del ejemplo Reloj Localizado. Por favor, consulte esa página para más detalles.

main.cpp

El punto de inicio de la aplicación, responsable de cargar el módulo 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();
}
Gestor del traductor (translator.h, translator.cpp)

TranslatorManager es una clase QML singleton que gestiona el cambio de idioma y configuración regional en tiempo de ejecución. El método central de la clase es TranslatorManager::switchLanguage(), que acepta una cadena que representa un código de idioma.

Mientras que el método está marcado con Q_INVOKABLE, la clase TranslatorManager está declarada con QML_ELEMENT y QML_SINGLETON. Esto permite acceder directamente al método desde QML; véase también Main.qml.

void GestorTraductor::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()));
    } }
Actualización de traducciones en tiempo de ejecución

Al cambiar de idioma, se elimina la traducción anterior (QCoreApplication::removeTranslator()) y se carga una nueva traducción para el idioma seleccionado (QTranslator::load()) y se instala (QCoreApplication::installTranslator()). QQmlEngine::retranslate() activa la retraducción de las cadenas en el documento QML.

Actualización de los formatos de fecha y hora

El cambio de idioma también puede afectar a la forma en que se muestran las fechas y las horas. Por ejemplo, si QLocale en su sistema prefiere la configuración regional "en_US" para "en", y "de_DE" para "de":

  • La aplicación se carga inicialmente con "US" como código de país.
  • Debido a las convenciones locales de EE.UU., la fecha se presenta en formato MM/DD/AAAA, y la hora utiliza un reloj de 12 horas.
  • Después de cambiar el idioma a alemán, "de_DE" es la primera configuración regional preferida para el idioma alemán, por lo que el país cambia a Alemania.
  • Las convenciones alemanas traen la fecha en formato DD.MM.AAAA y utilizan un reloj de 24 horas.

Al cambiar de idioma, la aplicación actualiza su QLocale según el idioma seleccionado utilizando QLocale::setDefault(). Al representar la hora, la función Date.toLocaleTimeString() se encarga de localizar la hora y la fecha según la configuración regional de la aplicación (véase Main.qml).

Main.qml

El archivo QML principal define la interfaz de usuario de la aplicación. La interfaz de usuario presenta la hora, la fecha y un contador de segundos. Para la traducción básica (título de la ventana) y el manejo del plural (número de segundos), consulte el ejemplo Reloj localizado.

Al seleccionar un elemento de la Menu TranslatorManager.switchLanguage() se llama con el código de idioma respectivo. Esta llamada también se encarga de retraducir los textos traducibles (véase Gestor de Traductores). Sin embargo, todavía necesitamos invocar updateClock() para actualizar la representación de la hora en el nuevo formato de localización cuando se cambia el idioma.

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

Proyecto de ejemplo @ 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.