Ejemplo de reloj localizado
El ejemplo muestra las mejores prácticas para usar las características de traducción y localización de Qt en CMake y Qt Quick, incluyendo el manejo de plurales en diferentes idiomas, y formatos de fecha y hora localizados.
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. Además, los textos de la interfaz de usuario están localizados para los siguientes idiomas: Inglés, alemán, francés, español, italiano, japonés, coreano, portugués, árabe y chino. Si tu escritorio está en otro idioma, vuelve al inglés.
Para probar diferentes idiomas y configuraciones regionales sin alterar el sistema, el ejemplo también acepta una configuración regional como argumento en la línea de comandos. Por ejemplo, al iniciar localizedClock desde la línea de comandos con la opción --locale de se muestra el reloj en alemán, con el formato de fecha y hora habitual en Alemania.
La captura de pantalla muestra la versión en_US:

Internacionalización
En la aplicación, la traducción se utiliza para establecer el título de la ventana principal y algunos textos de la interfaz de usuario, incluidos los que contienen marcadores de posición y formas plurales. La aplicación cuenta los segundos con las formas plurales activadas (ver Manejar formas plurales). Como resultado, dependiendo del recuento de segundos, la función de traducción devuelve una traducción diferente, con el número gramatical correcto para el idioma de destino. Por ejemplo, en inglés, si el recuento es mayor que uno, se utiliza la forma plural; en caso contrario, se utiliza la forma singular. En Reglas de traducción para formas plurales encontrará las reglas de plural para diferentes idiomas.
La configuración regional también afecta al modo en que se muestran las fechas y horas. Éstas se formatean de acuerdo con las convenciones del país de la configuración regional actual. Por ejemplo, en una localización alemana la hora es de 24 horas y el día se escribe antes que el mes, mientras que en una localización estadounidense se utiliza un reloj de 12 horas y el mes se escribe antes que el día.
Esta captura de pantalla muestra la versión en_GB. Observe que el formato de los datos es diferente al de la versión en_US, mientras que en ambos casos se carga la misma traducción al inglés plural.

Esta es la captura de pantalla de la versión de_DE, que al igual que GB tiene un formato de fecha diferente al de US. Observe que la traducción al alemán de las formas regulares y plurales se carga en consecuencia.

Implementación
La implementación consta de tres partes:
CMakeLists.txt
El archivo CMake de la aplicación habilita el soporte de traducción y localización de Qt. Aquí están las piezas relevantes:
find_package(Qt6 REQUIRED COMPONENTS Core Linguist Qml Quick): Encuentra y enlaza los módulos Qt 6 necesarios, incluyendo Linguist que son esenciales para la internacionalización.
qt_standard_project_setup(...): Configura el sistema de internacionalización con soporte para las localizaciones listadas. I18N_SOURCE_LANGUAGE se deja en su valor por defecto (English), ya que el código fuente contiene textos en inglés.
qt_standard_project_setup(REQUIRES 6.8
I18N_TRANSLATED_LANGUAGES de ar ko zh ja fr it es pt)qt_add_translations(...): Agrupa la funcionalidad de lupdate y lrelease generando los archivos fuente de traducción (archivos TS) en el directorio "i18n" utilizando clock como nombre base, y compilándolos en archivos binarios .qm si contienen traducciones. Se generan los siguientes archivos TS:
- "clock_{de, ar, ko, zh, ja, fr, it, es, pt}.ts": Un archivo TS por cada idioma enumerado en
I18N_TRANSLATED_LANGUAGESdeqt_standard_project_setupque contiene las traducciones a ese idioma. - "clock_en.ts": Contiene las formas plurales en inglés, ya que el código fuente tiene traducción de formas plurales ("%n segundo(s)"). La función
qt_add_translationsescribe aquí sólo las formas plurales, ya que especificamos el idioma de los textos en el código fuente como inglés, al dejarI18N_SOURCE_LANGUAGEcon el valor por defecto. Así que los textos reglulares no necesitan traducción.
qt_add_translations(localizedClock
TS_FILE_BASE i18n/clock
RESOURCE_PREFIX i18n
)qt_add_qml_module(...): Añade un módulo QML bajo el URI qtexamples.localizedclock, incluyendo el archivo Main.qml.
qt_add_qml_module(localizedClock
URI qtexamples.localizedclock
VERSION 1.0
QML_FILES
Main.qml
)main.cpp
El punto de partida de la aplicación. Esta parte es responsable de establecer la configuración regional, instalar las traducciones necesarias y cargar la interfaz de usuario. A continuación se explican los fragmentos de código relevantes:
Defina el argumento de configuración regional, por ejemplo, --locale en_US o --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);
Analiza los argumentos, busca la configuración regional proporcionada y establece la configuración regional de entrada como la configuración regional predeterminada de la aplicación:
QLocale locale(parser.value(localeOption)); qInfo() << "Setting locale to" << locale.name(); QLocale::setDefault(configuración regional);
Instala la traducción al inglés independientemente de la configuración regional, para permitir traducciones incompletas para otros idiomas. QTranslator consulta las traducciones de los textos en el orden inverso al que se instalan las traducciones:
QTranslator enPlurals; const auto enPluralsPath = ":/i18n/reloj_es.qm"_L1; if (!enPlurals.load(enPluralsPath)) qFatal("Could not load %s!", qUtf8Printable(enPluralsPath)); app.installTranslator(&enPlurals);
Instala una traducción de acuerdo con la configuración regional dada. Como la traducción al inglés ya está instalada en el paso anterior, podríamos acabar con dos traducciones instaladas aquí. Qt utiliza la traducción instalada más recientemente para cualquier clave solapada. Por lo tanto, la traducción específica de la localización tendrá prioridad sobre la inglesa, y en caso de que falte alguna traducción, QTranslator volverá a la inglesa.
QTranslator translation; if (QLocale().language() != QLocale::Español) { if (translation.load(QLocale(), "reloj"_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())); } }
Principal.qml
Este archivo QML define la ventana principal de la interfaz de usuario de la aplicación, que presenta la hora, la fecha, la configuración regional utilizada y un contador de segundos. A continuación se explican los fragmentos de código relevantes:
Establece el título de la ventana usando qsTr() para la traducción. Para encontrar la traducción de este texto QTranslator consulta en el fichero TS del idioma actual el texto "Digital Clock" dentro del contexto "Main" (el nombre del fichero):
title: qsTr("Digital Clock")Muestra el número de segundos utilizando qsTr() con soporte plural (numeral). La forma plural se activa utilizando la notación especial "%n" (véase Manejo de formas plurales). Dependiendo del valor de n, la función de traducción devuelve una traducción diferente, con el número gramatical correcto para el idioma de destino. Por ejemplo, en inglés, si el valor de root.seconds es mayor que uno, se utiliza la forma plural; en caso contrario, se utiliza la forma singular. En Reglas de traducción para formas plurales encontrará las reglas de plural para distintos idiomas.
text: qsTr("%n second(s)", "seconds", root.seconds)Muestra la configuración regional actual y utiliza qsTr() para traducir el texto fuente "Configuración regional: %1". Además, la traducción debe contener el argumento "%1". Como resultado, el argumento del texto (es decir, Qt.locale().name) puede utilizarse correctamente para formatear el texto:
text: qsTr("Locale: %1").arg(Qt.locale().name)Formatee la hora y la fecha de acuerdo con las convenciones locales. Diferentes países pueden tener preferencias específicas sobre cómo deben presentarse la hora y la fecha. Por ejemplo, la configuración regional alemana utiliza un reloj de 24 horas y escribe el día antes que el mes, mientras que la configuración regional estadounidense sigue un reloj de 12 horas y coloca el mes antes que el día. El método Date.toLocaleTimeString tiene en cuenta estas consideraciones y formatea la hora y la fecha correctamente en función de la configuración regional:
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.