¿Las herramientas de localización de Qt admiten varios idiomas de forma eficaz?
Las herramientas de localización de Qt admiten varios idiomas de forma eficaz porque Qt es .ts traducation-source format y Qt Linguist estructuran el texto traducible como datos contextuales y sensibles al plural, en lugar de cadenas incrustadas en el código. La herramienta lupdate de Qt extrae todas las llamadas tr (), qStr () y QT_TRANSLATE_NOOP () del código fuente de C++ y QML de una aplicación a un .ts archivo por configuración regional, y lrelease compila el archivo traducido en el archivo binario .qm formato en el que la aplicación se carga en tiempo de ejecución. Smartling analiza .ts archivos de forma nativa bajo un tipo de archivo qt dedicado, no como XML genérico, por lo que un proyecto de 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 más comunes a la hora de utilizar Qt Linguist para la localización?
Los problemas más comunes de Qt Linguist provienen de cómo .ts los archivos fuente de traducción se generan y se mantienen sincronizados con una base de código C++/QML en movimiento, no desde el propio editor lingüístico.
- Alcance del contexto. El contexto de traducción de cada llamada
tr ()toma por defecto el nombre de la subclaseQObjectque la incluye (establecido mediante la macroQ_OBJECT), por lo que la misma cadena en inglés utilizada en dos clases diferentes se rastrea (y se puede traducir) como dos entradas distintas. Los equipos que no están familiarizados con esta estructura suelen dedicar tiempo real a perseguir lo que parece una cadena duplicada que Qt ha mantenido separada correctamente. - Regeneración y deriva.
lupdatetiene que reejecutarse cada vez que cambian las cadenas de origen, y una cadena fuera de unatr()llamada /qsTr()necesita que la derechaQT_TR_NOOP()oQT_TRANSLATE_NOOP()la macro sea captada en absoluto — si se salta la macro, la cadena está silenciosamente ausente de la.tsaunque sigue renderizándose en la app en marcha. - Manejo plural. La sintaxis plural
%nde Qt y laestructura numerus= " sí "/numerusformen el.tsel archivo requiere todas las categorías en plural que necesita rellenar el idioma de destino; la falta de un formulario no falla en la compilación, solo deja las mayúsculas y minúsculas gramaticales sin traducir en tiempo de ejecución. - Por defecto, no hay contexto visual. Como en la mayoría de los formatos de archivo de recurso, un
.tsun archivo proporciona al traductor una cadena y su comentario circundante, no una imagen de la interfaz renderizada, por lo que el texto sensible al diseño — elementos del menú, etiquetas de botones — corre el riesgo de truncamiento sin un paso contextual separado. - Disciplina de compilar y enviar. Traducido
.tsel contenido solo llega a los usuarios después de quelreleaselo compile en un.qmbinario archivo y la aplicación se cargan en la configuración regional correcta. Un equipo que olvida cualquiera de los pasos envía una versión que parece estar completamente traducida en Linguist, pero que muestra el inglés en tiempo de ejecución.
¿Qué aspecto tiene un flujo de trabajo de localización de Qt fiable?
- Instrumentación de origen: marque todas las cadenas visibles para el usuario con
tr (),qStr ()o la macro_NOOPcorrespondiente para quelupdatepueda encontrarla y añadirQ_OBJECT(oQ_DECLARE_TR_FUNCTIONSpara una clase que no sea deQObject) para que Qt Linguist tenga un contexto de traducción real en el que agrupar las cadenas. - Extracción : ejecutarse
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: abra el
.tsarchivar en Qt Linguist para su revisión interna o enrutarlo a través de un sistema de gestión de traducciones como Smartling, que analiza .tsde forma nativa bajo un tipo dearchivo qtdedicado y mantiene bloqueados los marcadores de posiciónnumerados %1/%2y las entradasen plural numerusform bloqueadas como datosestructurados en lugar de texto editable. - Compilación: ejecute
lreleasepara compilar cada.tstraducido archivo en un.qmbinario archivo; se trata de un paso de creación obligatorio, no de un embalaje opcional. - Carga en tiempo de ejecución: instale el
.qmcorrespondiente archivar medianteQTranslatoren C++ o la carga automática deQQMLApplicationEngineen QML y gestionar elevento QEvent: :LanguageChange si la aplicación necesita cambiar de idioma sinreiniciarse.
Gestión de archivos de Qt Linguist: especificaciones técnicas
| Item | Detalle |
|---|---|
| Extensión de archivo | .ts (fuente de traducción, basada en XML); se compila en el archivo binario .qm formato en el que se carga la aplicación |
| Identificador de tipo de archivo Smartling | qt |
| Tamaño máximo de archivo (Smartling) | 10MB |
| Soporte de formularios plurales | Nativo — Smartling lee el atributo numerus="yes" y los elementos numerusform Qt Linguist escribe |
| Formato provisional | La opción QT de 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 | inteligente.qt_locale_style (por ejemplo, =posix) establece el formato de configuración regional de salida cuando la configuración regional de origen no se puede detectar automáticamente |
| Gestión de cadenas sin traducir (API de archivos) | IncludeOriginalStrings=False devuelve una cadena vacía en lugar de la fuente en inglés si no existe ninguna 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?
- Instrumente la fuente: coloque todas las cadenas visibles para el usuario en tr (), qStr () o una macro _NOOP y añada 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: convierte cada .ts traducido archivo en su archivo binario .qm homólogo como parte de la creación; este paso es lo que realmente pone una traducción a disposición de la aplicación en ejecución.
- Cargar y probar en tiempo de ejecución: instalar el .qm correspondiente archivar mediante la carga automática de QTranslator o QQmlApplicationEngine y comprobar que las formas en plural y el orden de parámetros %1/%2 se muestran correctamente en un idioma con un orden de palabras diferente al inglés.
Este enfoque se adapta a equipos que...
- Envíe una aplicación de escritorio, integrada o móvil Qt/C++ o Qt Quick (QML) que ya marque las 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.
- Lanzar en una cadencia donde volver a ejecutar lupdate y volver a traducir cadenas cambiadas tenga que ser un paso repetible de la pipeline, no una exportación única.
Cuando un flujo de trabajo de localización de Qt dedicado puede no ser la prioridad correcta
- Un prototipo o una herramienta interna sin un segundo idioma planificado: el flujo de trabajo manual de Qt Linguist es suficiente hasta que se inicie la localización.
- Una única localización adicional traducida una vez por un desarrollador bilingüe interno, sin cambios continuos de cadenas que seguir.
- Proyectos donde la mayor parte del contenido orientado al usuario está completamente fuera del sistema tr() de Qt — el contenido web renderizado por servidor o un CMS separado pertenece a un flujo de trabajo de localización web o CMS, no a uno de Qt Linguist.
Lista de verificación de evaluación: preguntas que debes hacer antes de construir esto
¿Sus cadenas traducibles ya están incluidas en tr (), qStr () o en una macro _NOOP?
Si no, Lupdate no puede encontrarlos. La instrumentación de la fuente tiene que hacerse antes de que cualquier herramienta de traducción añada valor.
¿Su aplicación utiliza la sintaxis en plural %n de Qt en alguna parte?
En caso afirmativo, confirme que su plataforma de traducción asigna automáticamente las entradas numerus= " yes " /numerusform a las categorías plurales completas de CLDR en lugar de tratarlas como texto sin formato.
¿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.
¿Su plataforma analiza .ts? de forma nativa, ¿o primero requiere convertirla a otro formato?
El análisis nativo con un tipo de archivo dedicado evita un paso de conversión que un extractor de XML genérico añadiría de otro modo.
¿Necesitan los traductores contexto visual para evitar botones o elementos del menú truncados?
Desde .ts no lleva ninguna 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 Qt Linguist .ts archivos 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 los marcadores de posición de Qt se reconocen automáticamente en lugar de necesitar las directivas al estilo translate_paths que necesitaría un archivo XML personalizado. Smartling admite de forma nativa las formas plurales de los archivos de Qt Linguist, leyendo los elementos de atributo y numerusform numerus= " yes " que escribe Qt Linguist y los mapea a las categorías plurales de CLDR correctas para cada idioma de destino. Los parámetros numerados %1/%2 de Qt están protegidos con la opción de formato de marcador de posición QT de Smartling, disponible mediante la directiva placeholder_format junto con los formatos para proyectos al estilo iOS, Java, Python y RESX, de modo que un traductor que trabaje con la herramienta CAT de Smartling no puede volver a escribir ni reordenar accidentalmente un token del que depende la aplicación en ejecución. Los equipos que gestionan cadenas sin traducir a través de la API Files pueden configurar IncludeOriginalStrings=false para que devuelva una cadena vacía en lugar de la fuente en inglés cuando la traducción aún no esté disponible. Los archivos se suben hasta un límite de 10 MB, de forma manual o mediante la API de Smartling, y los caracteres reservados estándar del XML se escapan por defecto 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?
Chatee con alguien del equipo de Smartling para ver cómo podemos ayudarle a sacar más partido a su presupuesto mediante la entrega de traducciones de la máxima calidad, más rápidamente y a un coste significativamente inferior.