¿Pueden las herramientas de localización de Qt soportar varios idiomas de forma eficiente?
Las herramientas de localización de Qt admiten varios idiomas de manera eficiente porque Qt emplea archivos .ts. Tanto el formato translation-source como Qt Linguist estructuran el texto traducible como datos contextuales y que tienen en cuenta el plural, en lugar de cadenas incrustadas en el código. La herramienta lupdate de Qt extrae todas las llamadas a tr(), qsTr() y QT_TRANSLATE_NOOP() del código fuente C++ y QML de una aplicación y las almacena en un archivo .ts. archivo por configuración regional, y lrelease compila el archivo traducido en el binario .qm Formatear las cargas de la aplicación en tiempo de ejecución. Smartling analiza archivos .ts Los archivos se procesan de forma nativa bajo un tipo de archivo qt específico, no como XML genérico, de modo que un proyecto Qt puede enrutar esos archivos a través de una plataforma de traducción sin un paso de conversión manual, y la sintaxis plural de Qt (numerus="yes", numerusform) se captura automáticamente en lugar de requerir directivas personalizadas.
Última revisión: 17 de septiembre de 2026
¿Cuáles son los desafíos comunes al usar Qt Linguist para la localización?
Los problemas más comunes con Qt Linguist provienen de cómo .ts Los archivos fuente de traducción se generan y se mantienen sincronizados con un código base C++/QML en constante evolución, no desde el propio editor Linguist.
- Alcance contextual. El contexto de traducción de cada
tr()llamada se establece por defecto en el nombre de su subclase adjuntaQObject(configurada a través de laQ_OBJECTmacro), por lo que la misma cadena en inglés usada en dos clases diferentes se rastrea —y puede traducir— como dos entradas separadas. Los equipos que no están familiarizados con esta estructura suelen pasar tiempo real persiguiendo lo que parece una cadena duplicada que Qt mantuvo correctamente separada. - Regeneración y deriva.
lupdatedebe ejecutar de nuevo cada vez que cambian las cadenas de origen, y una cadena fuera de una llamada atr()/qsTr()necesita la macroQT_TR_NOOP()oQT_TRANSLATE_NOOP()correcta para que se detecte; si se omite la macro, la cadena no aparece en el archivo.tsarchivo, aunque todavía se renderiza en la aplicación en ejecución. - Manejo en plural. La sintaxis plural de
%nQt y lanumerus="yes"estructura /numerusformen el.tsRequieren todas las categorías plurales en las que un idioma destino debe rellenar; un formulario ausente no falla en la compilación, simplemente deja ese caso gramatical sin traducir en tiempo de ejecución. - Sin contexto visual por defecto. Al igual que la mayoría de los formatos de archivos de recursos, un archivo
.tsEl archivo proporciona al traductor una cadena de texto y su comentario circundante, no una imagen de la interfaz de usuario renderizada, por lo que el texto sensible al diseño (elementos de menú, etiquetas de botones) corre el riesgo de truncar sin un paso de contexto independiente. - Disciplina de compilar y enviar. Traducido
.tsEl contenido solo llega a los usuarios luego delreleaselo compila en un archivo binario.qmEl archivo y la aplicación cargan la configuración regional correcta; un equipo que olvida cualquiera de estos pasos lanza una versión que parece estar completamente traducida en Linguist, pero que muestra inglés en tiempo de ejecución.
¿Cómo es un flujo de trabajo fiable para localizar Qt?
- Instrumentación de origen : marca cada cadena visible para el usuario con
tr(),qsTr(), o la macro correspondiente_NOOPparalupdatepoder encontrarla, y agregaQ_OBJECT(oQ_DECLARE_TR_FUNCTIONSpara una no-claseQObject) para que Qt Linguist tenga un contexto de traducción real para agrupar las cadenas debajo. - Extracción : ejecutar
lupdatedirectamente o a través deqt_add_translationsCMake, para generar o actualizar uno.tsArchivo por localidad de destino mientras conservas las traducciones que ya existen. - Traducción : abre el archivo
.tsEnvía el archivo a Qt Linguist para su revisión interna, o bien, envíalo a través de un sistema de gestión de traducciones como Smartling, que analiza archivos.tsDe forma nativa, bajo un tipo de archivoqtdedicado, mantiene los marcadores de posición numerados%1/%2y las entradas pluralesnumerus/numerusformbloqueadas como datos estructurados en lugar de texto editable. - Compilación : ejecute
lreleasepara compilar cada archivo.tstraducido. archivo en un binario.qmarchivo; este es un paso de compilación obligatorio, no un empaquetado opcional. - Carga en tiempo de ejecución - instala el emparejamiento
.qmenQTranslatorC++ oQQmlApplicationEngineen carga automática de 's en QML, y gestionar elQEvent::LanguageChangeevento si la aplicación necesita cambiar de idioma sin resetear.
Gestión de archivos de Qt Linguist: especificaciones técnicas
| Item | Detalle |
|---|---|
| Extensión de archivo | .ts (fuente de traducción, basada en XML); compila al binario .qm Formatea la aplicación |
| Identificador de tipo de archivo Smartling | qt |
| Tamaño máximo de archivo (Smartling) | 10MB |
| Soporte para formas plurales | Nativo: Smartling lee el atributo numerus="yes" y los elementos numerusform. Qt Linguist escribe |
| Formato de marcador de posición | La opción QT bajo la directiva placeholder_format, junto con NONE, C, IOS, PYTHON, JAVA, YAML y RESX — protege los parámetros numerados%1/%2 de Qt |
| Directiva de formato local | smartling.qt_locale_style (por ejemplo, =posix) establece el formato de la localidad de salida cuando la localidad de origen no puede ser detectada automáticamente |
| Manejo de cadenas no traducidas (API de archivos) | includeOriginalStrings=false devuelve una cadena vacía en lugar de la fuente en inglés cuando no existe traducción |
Fuente: Smartling Help Center — lingüista QT, y Smartling Help Center — plurales. Verificado el 17 de septiembre de 2026.
¿Cuáles son los pasos concretos para localizar una aplicación Qt?
- Instrumenta la fuente : envolve cada cadena visible del usuario en tr(), qsTr() o una macro _NOOP, y agrega Q_OBJECT (o Q_DECLARE_TR_FUNCTIONS) a cualquier clase que necesite su propio contexto de traducción.
- Genera .ts archivos con lupdate : ejecuta lupdate, directamente o a través de la qt_add_translations de CMake, para producir un .ts Archivo por localidad de destino y reejecutarlo cada vez que cambian las cadenas de origen para que no se acumule deriva de traslación.
- Traduce el archivo .ts - trabaja en Qt Linguist para un único traductor interno, o sube el archivo a un TMS como Smartling, que lo analiza bajo el tipo de archivo qt y mantiene los marcadores de posición y plurales de entradas de estilo%1 bloqueados como datos estructurados.
- Compilar con lrelease - convertir cada .ts traducida archivo en su .qm binario contraparte como parte de la compilación; este paso es lo que realmente hace que una traducción esté disponible para la aplicación en ejecución.
- Cargar y probar en tiempo de ejecución : instalar el archivo .qm correspondiente. El archivo se carga automáticamente a través de QTranslator o QQmlApplicationEngine, y se verifica que las formas plurales y el orden de los parámetros%1/%2 se muestren correctamente en un idioma con un orden de palabras diferente al del inglés.
Este enfoque se adapta a equipos que...
- Distribuye una aplicación de escritorio, integrada o móvil Qt/C++ o Qt Quick (QML) que ya marque cadenas con tr() o qsTr().
- Necesito traducir correctamente la sintaxis plural%n de Qt y la estructura numerus/numerusform a través del conjunto completo de categorías plurales CLDR de un idioma destino, no solo una sola forma.
- ¿Quieres .ts archivos enrutados a través de la misma memoria de traducción y glosario ya usados para otros formatos — JSON, XLIFF, RESX — en lugar de un flujo de trabajo separado solo para escritorio.
- Implementar actualizaciones con una periodicidad tal que volver a ejecutar lupdate y volver a traducir las cadenas modificadas deba ser un paso repetible en el proceso, no una exportación única.
Cuando un flujo de trabajo de localización Qt dedicado puede no ser la prioridad adecuada
- Un prototipo o herramienta interna sin un segundo idioma planeado — el flujo de trabajo manual de Qt Linguist es suficiente hasta que la localización realmente comience.
- Un único idioma adicional traducido una sola vez por un desarrollador bilingüe interno, sin cambios de cadena continuos que controlar.
- Proyectos donde la mayor parte del contenido orientado al usuario está completamente fuera del sistema tr() de Qt — el contenido sitio web renderizado por servidor o un CMS separado pertenece a un flujo de trabajo de localización sitio web o CMS, no a uno de Qt Linguist.
Lista de verificación de evaluación: preguntas que debes hacer antes de construir esto
¿Tus cadenas traducibles ya están envoltas en tr(), qsTr() o una macro _NOOP?
De lo contrario, lupdate no podrá encontrarlos; es necesario instrumentar el código fuente antes de que cualquier herramienta de traducción aporte valor.
¿Su aplicación emplea la sintaxis de plural%n de Qt en algún punto?
Si es así, confirme que su plataforma de traducción asigna automáticamente las entradas numerus="yes"/numerusform a las categorías plurales CLDR completas en lugar de tratarlas como texto plano.
¿Cuántas localidades objetivo y con qué frecuencia cambia el texto fuente?
Un puñado de ubicaciones estáticas se siente cómodo solo en Qt Linguist; los cambios frecuentes de fuente en muchas localidades son donde la memoria de traducción de un TMS y una pipeline repetible de lupdate-translate-lrelease empiezan a dar frutos.
¿Tu plataforma analiza archivos .ts? ¿Es compatible de forma nativa o requiere convertirlo primero a otro formato?
El análisis nativo bajo un tipo de archivo específico evita un paso de conversión que, de otro modo, agregaría un extractor XML genérico.
¿Necesitan los traductores contexto visual para evitar botones o elementos del menú truncados?
Desde .ts No incluye vista previa renderizada por defecto; confirme cómo se proporciona el contexto antes de que las cadenas se envíen sin probar.
¿Cómo gestiona Smartling la localización de Qt Linguist?
Smartling analiza el archivo .ts de Qt Linguist. Los archivos se tratan como un tipo de archivo dedicado —identificado internamente como qt— en lugar de enrutarlos a través de su analizador XML genérico, lo cual es importante porque la estructura plural y la sintaxis de marcadores de posición de Qt se reconocen automáticamente en lugar de necesitar las directivas de estilo translate_paths que requeriría un archivo XML personalizado. Smartling admite de forma nativa las formas plurales de los archivos de QT Linguist, leyendo el atributo numerus="yes" y los elementos numerusform que escribe Qt Linguist y asignándolos a las categorías plurales CLDR correctas para cada idioma de destino. Los parámetros numerados%1/%2 de Qt están protegidos por la opción de formato de marcador de posición QT de Smartling, disponible a través de la directiva placeholder_format junto con los formatos para proyectos de iOS, Java, Python y estilo RESX, de modo que un traductor que trabaje en la herramienta CAT de Smartling no pueda volver a escribir o reordenar accidentalmente un token del que dependa la aplicación en ejecución. Los equipos que gestionan cadenas sin traducir a través de la API de archivos pueden configurar includeOriginalStrings=false para que se devuelva una cadena vacía en lugar del texto original en inglés cuando aún no haya una traducción disponible. Los archivos se pueden cargar hasta un límite de 10 MB, ya sea manualmente o a través de la API de Smartling, y los caracteres reservados XML estándar se escapan de forma predeterminada en las traducciones entregadas, con una directiva entity_escaping disponible cuando un proyecto necesita un tratamiento diferente.
¿Listo para ver a Smartling en acción?
Converse con alguien del equipo de Smartling para identificar cómo podemos ayudarle a aprovechar mejor su presupuesto al entregarle traducciones con la más alta calidad, mayor rapidez y a costos mucho más bajos.