gettextを使用してQMLファイルを翻訳可能にする方法


10

Python(PySide)とQMLに基づくQtQuickアプリを書きたいのですが。

Qtアプリには独自の翻訳テクノロジーがあることは知っていますが、これについてはgettextに固執したいと思います。次のことが可能かどうかを知りたいです。

  • gettextのツールがにそれらを取り出すことができる方法でQMLファイル内の翻訳のためにマークする文字列.potファイル
  • gettextが実行時にQMLファイルを変換するようにします。

私はこれがUnity 2Dコード、C ++で行われていることを知っているので、Pythonでそれをどのように行うことができるのか疑問に思っています。

注:実行時にgettextのみを使用することについて話しているのであり、gettext形式とQt Linguist形式の間の変換については話していません。

回答:


6

QTBUG-2404に記載されているように、ライブラリは内部変換メカニズム(Qtranslateおよび.tsファイル)を使用するため、QTでgettext変換を使用する方法はありません。

ただし、実行可能な代替手段があります。

QTに同梱されているのは、.tsファイルを.poに、またはその逆に変換するために使用できるlconvertと呼ばれるツールキットです。

したがって、次のコマンドを使用してすべての翻訳を抽出できます。

lupdate

次に、lconvertを使用してpoファイルを取得します。

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

翻訳後、poファイルをtsに変換できます。

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

その後、ソフトウェアで使用できます。

lupdateは、QTとQtQuickの両方で使用できます。


1
答えてくれてありがとう!私は変換ツールを知っていますが、それらは実行時にgettextに翻訳をロードさせません。Unity 2Dの連中がC ++で行うように、Qt変換呼び出しをオーバーライドすることで技術的に可能であることを知っています。Pythonでそれを行う方法を理解しようとしています。
David Planella、2012年

0

lupdateのソースをハックして、qsTrの代わりに好きなものを使用できます。(簡単です)そして、ハッキングしたlupdate + lconvert +を使用してlibintlをカスタマイズし、gettextの目的を達成します。


1
どのように説明してください。
Kaz Wolfe

qdeclarative.cpp(lupdteソースコード内)を開き、 "qsTr"を必要なもので置き換えます。 "dsTr"を使用するとします。次に、qmlでdsTr( "you string")を使用します。変更されたlupdateを使用してtsファイルを生成した後、lconvertを使用してpotファイルを生成します。最後に、dsTrを実装してグローバルコンテキストにエクスポートする必要があります
snyh 2013年

頭に行って、それを答えに入れてください。原則として、常に方法を教えてから、ソースを提供します。
Kaz Wolfe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.