Come usare gettext per rendere traducibili i file QML


10

Vorrei scrivere un'app QtQuick basata su Python ( PySide ) e QML .

So che le app Qt hanno la loro tecnologia di traduzione, ma vorrei attenermi a gettext per questo. Vorrei sapere se è possibile:

  • Contrassegna le stringhe per la traduzione in file QML in un modo in cui gli strumenti gettext possono estrarle in un .potfile
  • Chiedi a gettext di tradurre i file QML in fase di esecuzione.

So che questo viene fatto nel codice Unity 2D , in C ++, quindi mi chiedo come possa essere fatto con Python.

Nota: sto parlando dell'utilizzo esclusivo di gettext in fase di esecuzione, non della conversione tra i formati gettext e Qt Linguist.

Risposte:


6

In generale, non è possibile utilizzare la traduzione gettext in QT perché la libreria utilizza un meccanismo di traduzione interno (file Qtranslate e .ts) come indicato qui QTBUG-2404 .

Tuttavia, esiste un'alternativa praticabile.

Con QT è disponibile un toolkit chiamato lconvert che può essere utilizzato per convertire i file .ts in .po e viceversa.

Quindi puoi estrarre tutta la tua traduzione con:

lupdate

Quindi utilizzare lconvert per ottenere un file po:

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

Dopo la traduzione puoi riconvertire il file po in ts:

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

Quindi puoi usarlo nel tuo software.

lupdate può essere usato sia per QT che per QtQuick.


1
Grazie per la risposta!. Sono a conoscenza degli strumenti di conversione, ma non faranno in modo che gettext carichi le traduzioni in fase di esecuzione. So che è tecnicamente possibile sovrascrivendo la chiamata Qt translate, mentre i ragazzi di Unity 2D lo fanno in C ++, sto solo cercando di capire come farlo in Python.
David Planella,

0

Puoi hackerare la fonte del lupdate usando qualcosa che ti piace per sostituire qsTr. (è facilmente) e poi usa il tuo lupdate hackerato + lconvert + tu custome libintl per raggiungere l'obiettivo gettext.


1
Spiega come, per favore.
Kaz Wolfe,

apri qdeclarative.cpp (nel codice sorgente di lupdte) trova "qsTr" sostituiscilo con tutto quello che vuoi, supponi di usare "dsTr". Quindi utilizzare dsTr ("stringa") in qml. usa lconvert genera un file pot dopo aver usato lupdate modificato per generare un file ts. L'ultimo è necessario implementare ed esportare il dsTr nel contesto globale
snyh

Vai a testa e mettilo nella risposta. Proprio come una regola generale, dire sempre come e quindi dare la fonte.
Kaz Wolfe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.