2011-12-14 10 views
17

Aquí está mi problema: tenemos archivos .ts para nueve idiomas diferentes para nuestro producto. Hemos agregado unas 100 cadenas nuevas que deben traducirse, pero algunas son para nuestra próxima versión, y otras son para la versión posterior. Hemos tenido problemas con los traductores que faltan cadenas o traducciones de cadenas con anticipación. Queremos poder enviarles un archivo .ts más pequeño que contenga solo las cadenas que queremos traducir ahora, y luego combinar ese archivo .ts en el archivo .ts más grande que contenga el resto de la traducción.Fusiona archivos de traducción (.ts) con archivos .ts existentes usando QT Utilities (lconvert)

Nuestros traductores deben utilizar QT Linguist (anteriormente les permitimos editar el XML sin procesar con resultados no tan estelares).

Una solución sería utilizar contextos, pero nuestro equipo de desarrollo no está muy interesado en esa idea. Otro sería fusionar los archivos .ts a mano, pero eso parece una receta para cortar & pegar errores.

¿Hay algún método con lupdate & para agregar o fusionar archivos .ts secundarios? He leído los foros en QT-land sin encontrar la respuesta, pero los modificadores en lupdate aluden al hecho de poder señalar otros archivos de traducción. Específicamente el interruptor -Pro que dice:

-pro <filename> 
     Name of a .pro file. Useful for files with .pro file syntax but 
     different file suffix. Projects are recursed into and merged. 

Ejemplo 1: tenemos un archivo ts alemán, queremos añadir 20 cuerdas desde un archivo de traducción alemana separada de tal manera que el archivo de traducción primario contiene todas las cadenas que incluyen el 20 nuevos.

Ejemplo2: tenemos un archivo .ts alemán, queremos agregar 20 cadenas de un archivo de traducción alemán separado de modo que el archivo de traducción secundario se fusione con el primario durante lupdate para que el archivo .qm resultante contenga todo el cadenas incluidas las 20 nuevas.

¿Alguien ha hecho cualquiera de estos (y cualquiera de ellos funcionaría) y me puede dar alguna idea?

Respuesta

30

La respuesta no utiliza lupdate, se encuentra en otra utilidad llamada lconvert. Es muy fácil crear un archivo secundario que sólo contiene las cadenas que le interesan (y eliminar esas mismas cadenas del archivo de primaria), a continuación, ejecute:

lconvert -i primary.ts secondary.ts -o complete.ts

Esto tomará todas las cuerdas de la dos archivos de entrada y los puso juntos en el archivo de salida. Utilizando este método, pude crear un archivo de diferencia cero (que no sea la marca de tiempo) del archivo original desde el que dividiría los dos archivos secundarios & principales.

Esta pregunta no llamó mucho la atención, pero tal vez alguien tenga este mismo problema y esto ayudará.

2

gracias por este consejo. Parece que funciona correctamente para mi caso: Intenté extraer cadenas nuevas y actualizadas de mi proyecto, que actualmente está en proceso de traducción en una versión/versión anterior que aún no tengo cadenas traducidas.

El problema consistía en enviar las cadenas nuevas/actualizadas solo a los traductores.

Pasé las cadenas anteriores en estado resuelto, agregué una nueva cadena usando Lupdate, realicé una búsqueda usando el Editor OxygenXML con una XPath "/ TS/context/message [not (translation/@ type)]" para eliminar cadenas anteriores, y límpialo de espacios en blanco inútiles y retornos de carro.

He intentado fusionar usando lconvert con su solución, para fusionar cadenas traducidas: antiguas y nuevas. Pasa correctamente y se muestra correctamente.

+2

contento de esto funcionó para usted. Como punto de etiqueta SO, en general, si una respuesta funciona para usted, haga clic en la flecha hacia arriba de esa respuesta y, opcionalmente, agregue un comentario para aclarar cómo funcionó para usted, en lugar de agregar una respuesta que debería haber realmente solo sido un comentario sobre la respuesta original. Sin preocupaciones. – delliottg

-3

el uso de múltiples traducciones

archivos de traducción pueden instalar múltiples en una aplicación. Las traducciones se buscan en el orden inverso en el que se instalaron, por lo que el archivo de traducción instalado más recientemente se busca primero para las traducciones y el último archivo de traducción se busca por última vez. La búsqueda se detiene tan pronto como se encuentra una traducción que contiene una cadena coincidente.

Este mecanismo hace posible que una traducción específica sea "seleccionada" o tenga prioridad sobre las demás; simplemente desinstale el traductor desde la aplicación pasándolo a la función QApplication :: removeTranslator() y vuelva a instalarlo con QApplication :: installTranslator(). Será entonces la primera traducción en la que se buscarán cadenas coincidentes.

enlace de la prueba: QTranslator Class Reference

+1

esto no aborda la pregunta en absoluto: downvoted. – ndbd

Cuestiones relacionadas