Jak używać gettext do tłumaczenia plików QML

10

Chciałbym napisać aplikację QtQuick opartą na Pythonie ( PySide ) i QML .

Wiem, że aplikacje Qt mają własną technologię tłumaczenia, ale chciałbym trzymać się tego tekstu . Chciałbym wiedzieć, czy można:

  • Oznacz ciągi do tłumaczenia w plikach QML w taki sposób, aby narzędzia gettext mogły je wyodrębnić do .potpliku
  • Niech gettext przetłumaczy pliki QML w czasie wykonywania.

Wiem, że dzieje się to w kodzie Unity 2D w C ++, więc zastanawiam się, jak można to zrobić za pomocą Pythona.

Uwaga: mówię o używaniu wyłącznie gettext w czasie wykonywania, a nie o konwertowaniu między formatami gettext i Qt Linguist.

David Planella
źródło

Odpowiedzi:

6

Ogólnie rzecz biorąc, nie ma możliwości użycia tłumaczenia gettext w QT, ponieważ biblioteka używa wewnętrznego mechanizmu tłumaczenia (pliki Qtranslate i .ts), jak podano tutaj QTBUG-2404 .

Istnieje jednak realna alternatywa.

Wraz z QT dostępny jest zestaw narzędzi o nazwie lconvert, którego można użyć do konwersji plików .ts do .po i odwrotnie.

Możesz więc wyodrębnić wszystkie swoje tłumaczenia za pomocą:

lupdate

Następnie użyj lconvert, aby uzyskać plik PO :

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

Po tłumaczeniu możesz przekonwertować plik po do ts:

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

Następnie możesz użyć go w swoim oprogramowaniu.

lupdate może być używany zarówno do QT, jak i QtQuick.

Angelo
źródło
1
Dziękuję za odpowiedź!. Znam narzędzia do konwersji, ale nie powodują, że gettext ładuje tłumaczenia w czasie wykonywania. Wiem, że jest to technicznie możliwe, zastępując wywołanie translacji Qt, ponieważ faceci Unity 2D robią to w C ++, próbuję tylko wymyślić, jak to zrobić w Pythonie.
David Planella
0

Możesz zhakować źródło lupdate, używając czegoś, co chcesz zastąpić qsTr. (jest łatwe), a następnie użyj zhakowanego programu Lupdate + Lconvert + You Custome Libintl, aby osiągnąć cel gettext.

snyh
źródło
1
Wyjaśnij proszę.
Kaz Wolfe
otwórz qdeclarative.cpp (w kodzie źródłowym lupdte) znajdź „qsTr” zamień go na cokolwiek chcesz, załóż, że używasz „dsTr”. Następnie użyj dsTr („ciąg”) w qml. użyj lconvert wygeneruj plik pot po użyciu zmodyfikowanego lupdate do wygenerowania pliku ts. Ostatnia potrzeba implementacji i eksportu dsTr do kontekstu globalnego
snyh,
Idź głową i umieść to w odpowiedzi. Zasadniczo zawsze mów, jak, a następnie podaj źródło.
Kaz Wolfe