Como usar o gettext para tornar os arquivos QML traduzíveis

10

Gostaria de escrever um aplicativo QtQuick baseado em Python ( PySide ) e QML .

Eu sei que os aplicativos Qt têm sua própria tecnologia de tradução, mas eu gostaria de ficar com o gettext dessa. Gostaria de saber se é possível:

  • Marque seqüências de caracteres para tradução em arquivos QML de uma maneira que as ferramentas de gettext possam extraí-las em um .potarquivo
  • Faça com que o gettext traduza arquivos QML em tempo de execução.

Eu sei que isso é feito no código 2D do Unity , em C ++, então estou me perguntando como isso pode ser feito com Python.

Nota: Estou falando sobre o uso exclusivo de gettext em tempo de execução, não sobre a conversão entre os formatos gettext e Qt Linguist.

David Planella
fonte

Respostas:

6

De um modo geral, não há como usar a conversão de gettext no QT, porque a biblioteca usa um mecanismo de tradução interno (arquivos Qtranslate e .ts), conforme indicado aqui QTBUG-2404 .

No entanto, existe uma alternativa viável.

Envio com o QT, existe um kit de ferramentas chamado lconvert que pode ser usado para converter arquivos .ts em .po e vice-versa.

Então você pode extrair toda a sua tradução com:

lupdate

Em seguida, use lconvert para obter um arquivo po:

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

Após a tradução, você pode converter novamente o arquivo po em ts:

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

Então você pode usá-lo em seu software.

O lupdate pode ser usado tanto para o QT quanto para o QtQuick.

Angelo
fonte
1
Obrigado pela resposta! Estou ciente das ferramentas de conversão, mas elas não farão com que o gettext carregue as traduções em tempo de execução. Eu sei que é tecnicamente possível substituindo a chamada Qt translate, como os caras do Unity 2D fazem em C ++, eu só estou tentando descobrir como fazê-lo em Python.
David Planella 28/05
0

Você pode invadir a fonte do lupdate usando algo que você queira substituir qsTr. (é fácil) e, em seguida, use o lupdate hackeado + lconvert + custume libintl para obter o objetivo gettext do uso.

snyh
fonte
1
Explique como, por favor.
Kaz Wolfe
abra o qdeclarative.cpp (no código fonte do lupdte) encontre "qsTr" substitua-o com o que quiser, suponha que use "dsTr". Em seguida, use dsTr ("você string") no qml. use lconvert gerar um arquivo pot depois de usar o lupdate modificado para gerar um arquivo ts. O último que você precisa implementar e exportar o dsTr ao contexto global
snyh
Vá em frente e coloque isso na resposta. Como regra geral, sempre diga como e depois forneça a fonte.
Kaz Wolfe