QTranslator Class
La clase QTranslator proporciona soporte de internacionalización para la salida de texto. Más...
| Cabecera: | #include <QTranslator> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Hereda: | QObject |
Funciones Públicas
| QTranslator(QObject *parent = nullptr) | |
| virtual | ~QTranslator() |
| QString | filePath() const |
| virtual bool | isEmpty() const |
| QString | language() const |
| bool | load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString()) |
| bool | load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()) |
| bool | load(const uchar *data, int len, const QString &directory = QString()) |
| virtual QString | translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const |
Descripción detallada
Un objeto de esta clase contiene un conjunto de traducciones de un idioma de origen a un idioma de destino. QTranslator proporciona funciones para buscar traducciones en un archivo de traducción. Los archivos de traducción se crean utilizando Qt Linguist.
El uso más común de QTranslator es: cargar un archivo de traducción, e instalarlo usando QCoreApplication::installTranslator().
He aquí un ejemplo de función main() que utiliza QTranslator:
// Required for using the '_L1' string literal. using namespace Qt::StringLiterals; int main(int argc, char *argv[]) { QApplication app(argc, argv); QTranslator translator; // look up e.g. :/i18n/myapp_de.qm if (translator.load(QLocale(), "myapp"_L1, "_"_L1, ":/i18n"_L1)) QCoreApplication::installTranslator(&translator); QPushButton hello(QCoreApplication::translate("main", "Hello world!")); hello.resize(100, 30); hello.show(); return app.exec(); }
Ten en cuenta que el traductor debe crearse antes que los widgets de la aplicación.
La mayoría de las aplicaciones nunca necesitarán hacer nada más con esta clase. Las otras funciones proporcionadas por esta clase son útiles para aplicaciones que trabajan con ficheros traductores.
Buscar traducciones
Es posible buscar una traducción utilizando translate() (como hacen tr() y QCoreApplication::translate()). La función translate() recibe hasta tres parámetros:
- El contexto - normalmente el nombre de la clase que llama a tr().
- El texto fuente: normalmente el argumento de tr().
- La desambiguación - una cadena opcional que ayuda a desambiguar diferentes usos del mismo texto en el mismo contexto.
Por ejemplo, "Cancelar" en un diálogo podría tener "Anuluj" cuando el programa se ejecuta en polaco (en este caso el texto fuente sería "Cancelar"). El contexto sería (normalmente) el nombre de la clase del diálogo; normalmente no habría ningún comentario, y el texto traducido sería "Anuluj".
Pero no siempre es tan sencillo. La versión española de un cuadro de diálogo de impresora con opciones de impresión a doble cara y encuadernación probablemente requeriría tanto "Activado" como "Activada" como traducciones de "Enabled". En este caso, el texto fuente sería "Enabled" en ambos casos, y el contexto sería el nombre de la clase del diálogo, pero los dos elementos tendrían desambiguaciones como "two-sided printing" para uno y "binding" para el otro. La desambiguación permite al traductor elegir el género apropiado para la versión española, y permite a Qt distinguir entre las traducciones.
Uso de múltiples traducciones
Se pueden instalar múltiples archivos de traducción en una aplicación. Las traducciones se buscan en el orden inverso en el que se instalaron, de modo que primero se buscan las traducciones del archivo de traducción instalado más recientemente y al final las del archivo de traducción más antiguo. La búsqueda se detiene en cuanto se encuentra una traducción que contenga una cadena coincidente.
Este mecanismo permite "seleccionar" una traducción concreta o darle prioridad sobre las demás; basta con desinstalar el traductor de la aplicación pasándolo a la función QCoreApplication::removeTranslator() y volver a instalarlo con QCoreApplication::installTranslator(). Entonces será la primera traducción que se busque en busca de cadenas coincidentes.
Consideraciones de seguridad
Instale sólo archivos de traducción de fuentes fiables.
Los archivos de traducción son archivos binarios que se generan a partir de archivos fuente de traducción basados en texto. El formato de estos archivos binarios está estrictamente definido por Qt y cualquier manipulación de los datos en el archivo binario puede bloquear la aplicación cuando se carga el archivo. Además, incluso los archivos de traducción bien formados pueden contener traducciones engañosas o maliciosas.
Véase también QCoreApplication::installTranslator(), QCoreApplication::removeTranslator(), QObject::tr(), QCoreApplication::translate(), Ejemplo de reloj localizado, Ejemplo de pad de flechas y Ejemplo de impresión de trolls.
Documentación de las funciones miembro
[explicit] QTranslator::QTranslator(QObject *parent = nullptr)
Construye un objeto de archivo de mensajes vacío con el padre parent que no está conectado a ningún archivo.
[virtual noexcept] QTranslator::~QTranslator()
Destruye el objeto y libera los recursos asignados.
QString QTranslator::filePath() const
Devuelve la ruta del archivo de traducción cargado.
La ruta del archivo está vacía si aún no se ha cargado ninguna traducción, si la carga ha fallado o si la traducción no se ha cargado desde un archivo.
[virtual] bool QTranslator::isEmpty() const
Devuelve true si este traductor está vacío, en caso contrario devuelve false.
QString QTranslator::language() const
Devuelve el idioma de destino almacenado en el archivo de traducción.
bool QTranslator::load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
Carga filename + suffix (".qm" si no se especifica suffix ), que puede ser un nombre de archivo absoluto o relativo a directory. Devuelve true si la traducción se ha cargado correctamente; en caso contrario, devuelve false.
Si no se especifica directory, se utiliza el directorio actual (es decir, como currentPath()).
Se descarta el contenido anterior de este objeto traductor.
Si el nombre de archivo no existe, se prueban otros nombres de archivo en el siguiente orden:
- Nombre de archivo sin suffix añadido.
- Nombre de archivo con el texto después de un carácter en search_delimiters eliminado ("_." es el valor predeterminado para search_delimiters si es una cadena vacía) y suffix.
- El nombre del archivo se elimina sin añadir suffix.
- El nombre del archivo se elimina aún más, etc.
Por ejemplo, una aplicación que se ejecute en la configuración regional fr_CA (Canadá francófono) podría llamar a load("foo.fr_ca", "/opt/foolib"). load() intentaría abrir el primer archivo legible de la lista:
/opt/foolib/foo.fr_ca.qm/opt/foolib/foo.fr_ca/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.qm/opt/foolib/foo
Normalmente, es mejor utilizar la función QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &), porque utiliza QLocale::uiLanguages() y no simplemente el nombre de la localización, que se refiere al formato de fechas y números y no necesariamente al idioma de la interfaz de usuario.
bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
Carga filename + prefix + ui language name + suffix (".qm" si no se especifica suffix ), que puede ser un nombre de archivo absoluto o relativo a directory. Devuelve true si la traducción se ha cargado correctamente; en caso contrario, devuelve false.
El contenido anterior de este objeto traductor se descarta.
Si el nombre de archivo no existe, se prueban otros nombres de archivo en el siguiente orden:
- Nombre de archivo sin suffix añadido.
- Nombre de archivo con la parte del idioma ui después del carácter "_" eliminada y suffix.
- Nombre de archivo con la parte del idioma de la interfaz de usuario eliminada y sin suffix.
- Nombre de archivo con la parte del idioma ui eliminada, etc.
Por ejemplo, una aplicación que se ejecute en locale con los siguientes ui languages - "es", "fr-CA", "de" podría llamar a load(QLocale(), "foo", ".", "/opt/foolib", ".qm"). load() sustituiría '-' (guión) por '_' (guión bajo) en el idioma ui y luego intentaría abrir el primer archivo legible existente de esta lista:
/opt/foolib/foo.es.qm/opt/foolib/foo.es/opt/foolib/foo.fr_CA.qm/opt/foolib/foo.fr_CA/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.de.qm/opt/foolib/foo.de/opt/foolib/foo.qm/opt/foolib/foo./opt/foolib/foo
En los sistemas operativos en los que el sistema de archivos distingue entre mayúsculas y minúsculas, QTranslator también intenta cargar una versión en minúsculas del nombre de la configuración regional.
bool QTranslator::load(const uchar *data, int len, const QString &directory = QString())
Carga los datos del archivo QM data de longitud len en el traductor.
Los datos no se copian. La persona que llama debe poder garantizar que data no se borrará ni modificará.
directory sólo se utiliza para especificar el directorio base cuando se cargan las dependencias de un archivo QM. Si el archivo no tiene dependencias, este argumento se ignora.
Esta función sobrecarga QTranslator::load().
[virtual] QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const
Devuelve la traducción de la clave (context, sourceText, disambiguation). Si no se encuentra ninguna, prueba también (context, sourceText, ""). Si aún así falla, devuelve una cadena nula.
Nota: Las traducciones incompletas pueden provocar un comportamiento inesperado: Si no se proporciona ninguna traducción para (context, sourceText, ""), el método podría en este caso devolver en realidad una traducción para un disambiguation diferente.
Si n no es -1, se utiliza para elegir una forma adecuada para la traducción (por ejemplo, "%n archivo encontrado" frente a "%n archivos encontrados").
Si necesita insertar mediante programación traducciones en QTranslator, puede reimplementar esta función.
Nota: Esta función es thread-safe.
Véase también load().
© 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.