Comment utiliser gettext pour rendre les fichiers QML traduisibles

10

Je voudrais écrire une application QtQuick basée sur Python ( PySide ) et QML .

Je sais que les applications Qt ont leur propre technologie de traduction, mais je voudrais m'en tenir à gettext pour celle-ci. Je voudrais savoir s'il est possible de:

  • Marquer les chaînes à traduire dans des fichiers QML de manière à ce que les outils gettext puissent les extraire dans un .potfichier
  • Demandez à gettext de traduire les fichiers QML lors de l'exécution.

Je sais que cela se fait dans le code Unity 2D , en C ++, donc je me demande comment cela peut être fait avec Python.

Remarque: je parle d'utiliser exclusivement gettext à l'exécution, pas de convertir entre les formats gettext et Qt Linguist.

David Planella
la source

Réponses:

6

D'une manière générale, il n'y a aucun moyen d'utiliser la traduction gettext dans QT car la bibliothèque utilise un mécanisme de traduction interne (fichiers Qtranslate et .ts) comme indiqué ici QTBUG-2404 .

Cependant, il existe une alternative viable.

Avec QT, il existe une boîte à outils appelée lconvert qui peut être utilisée pour convertir des fichiers .ts en .po et vice versa.

Vous pouvez donc extraire toute votre traduction avec:

lupdate

Utilisez ensuite lconvert pour obtenir un fichier po:

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

Après la traduction, vous pouvez reconvertir le fichier po en ts:

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

Ensuite, vous pouvez l'utiliser dans votre logiciel.

lupdate peut être utilisé à la fois pour QT et QtQuick.

Angelo
la source
1
Merci d'avoir répondu!. Je connais les outils de conversion, mais ils ne feront pas charger gettext les traductions lors de l'exécution. Je sais que c'est techniquement possible en remplaçant l'appel de traduction Qt, comme les gars de Unity 2D le font en C ++, j'essaie juste de comprendre comment le faire en Python.
David Planella
0

Vous pouvez pirater la source du lupdate et utiliser quelque chose que vous aimez pour remplacer qsTr. (est facilement) puis utilisez votre hacked lupdate + lconvert + you custome libintl pour atteindre l'objectif d'utilisation de gettext.

snyh
la source
1
Expliquez comment s'il vous plaît.
Kaz Wolfe
ouvrez le qdeclarative.cpp (dans le code source lupdte) trouvez "qsTr" remplacez-le par tout ce que vous voulez, supposez utiliser "dsTr". Utilisez ensuite dsTr ("you string") en qml. utiliser lconvert générer un fichier pot après avoir utilisé la lupdate modifiée pour générer un fichier ts. Le dernier dont vous avez besoin pour implémenter et exporter le dsTr dans un contexte global
snyh
Allez-y et mettez cela dans la réponse. En règle générale, dites toujours comment puis indiquez la source.
Kaz Wolfe