Cómo usar gettext para hacer que los archivos QML sean traducibles

10

Me gustaría escribir una aplicación QtQuick basada en Python ( PySide ) y QML .

Sé aplicaciones Qt tienen su propia tecnología de traducción, pero me gustaría que se adhieren a gettext para éste. Me gustaría saber si es posible:

  • Marcar cadenas para la traducción en archivos QML de manera que las herramientas gettext puedan extraerlas en un .potarchivo
  • Haga que gettext traduzca archivos QML en tiempo de ejecución.

Sé que esto se hace en el código Unity 2D , en C ++, así que me pregunto cómo se puede hacer con Python.

Nota: estoy hablando de usar exclusivamente gettext en tiempo de ejecución, no de convertir entre formatos gettext y Qt Linguist.

David Planella
fuente

Respuestas:

6

En términos generales, no hay forma de utilizar la traducción gettext en QT porque la biblioteca utiliza un mecanismo de traducción interno (archivos Qtranslate y .ts) como se indica aquí QTBUG-2404 .

Sin embargo, hay una alternativa viable.

En el envío con QT, hay un kit de herramientas llamado lconvert que se puede usar para convertir archivos .ts a .po y viceversa.

Para que pueda extraer toda su traducción con:

lupdate

Luego use lconvert para obtener un archivo po:

lconvert -of po -o file.po file.ts

Después de la traducción, puede volver a convertir el archivo po a ts:

lconvert -of ts -o file.ts file.po

Entonces puedes usarlo en tu software.

lupdate puede usarse tanto para QT como para QtQuick.

Angelo
fuente
1
¡Gracias por la respuesta!. Conozco las herramientas de conversión, pero no harán que gettext cargue las traducciones en tiempo de ejecución. Sé que es técnicamente posible al anular la llamada de traducción Qt, ya que los chicos de Unity 2D lo hacen en C ++, solo estoy tratando de descubrir cómo hacerlo en Python.
David Planella
0

Puedes hackear la fuente de lupdate usando algo que te guste para sustituir qsTr. (es fácil) y luego usa hackeado lupdate + lconvert + usas libintl para lograr el objetivo de gettext.

snyh
fuente
1
Explica cómo, por favor.
Kaz Wolfe el
abra el qdeclarative.cpp (en el código fuente lupdte) encuentre "qsTr" sustitúyalo por lo que quiera, suponga que usa "dsTr". Luego use dsTr ("you string") en qml. use lconvert generar un archivo pot después de usar el lupdate modificado para generar un archivo ts. Lo último que necesita implementar y exportar el dsTr al contexto global
snyh
Ve a la cabeza y pon eso en la respuesta. Como regla general, siempre diga cómo y luego proporcione la fuente.
Kaz Wolfe el