3

QtDesigner からのテキストは翻訳できますが、それ以外で定義されているものは翻訳できません。

例では、このコード:

from PyQt4.QtCore import QCoreApplication
tr = QCoreApplication.translate


class Flag(object):

    def __init__(self, name):

        self._name = name
        self._setting_events = []
        self._clearing_events = []
        self._toggle_events = []
        self._true_name = tr("Flags", u'True')
        self._false_name = tr("Flags", u'False')

ドキュメントによると、最初のパラメーターはcontextで、2 番目のパラメーターはsourceTextです。しかし.ts、QtLinguist でファイルを開くと、 contextsourceTextで、sourceTextがコメントであることがわかります。QtLinguist で翻訳した後、.qmファイルをリリースしてアプリを実行しましたが、テキストは変更されません。渡されたsourceTextしか表示されないため、この例ではまだ'True'翻訳したものではありません。

私は何を間違っていますか?

4

2 に答える 2

2

翻訳機能が機能する前に、翻訳者をロードする必要があります。次のようなコードでそれを行います。

translationFile = "<langfile>.qm"
translator = QtCore.QTranslator()
translator.load(translationFile, "<filepath>")
a.installTranslator(translator)

これaは、次のようなコードで作成する「アプリ」オブジェクトです。

a = QtGui.qApp.instance()

これは通常if __name__ == '__main__':、メインの Python ファイルのブロックで行われます。

于 2013-02-05T19:47:24.280 に答える
1

私はちょうど同じ罠に落ちました。上記のpiccyのコメントはそれをすべて言います。

pylupdate は「単なる」ファイル パーサーです。tr()とを文字列として検索しtranslate()ます。などの影響は無視されmy_tr_func = translateます。

あなたが書くなら

my_tr_func = translate
text = my_tr_func("Context", "Source text")

あなたの文字列は無視されます。

ここでのトリックは、tr() を単なる文字列ではなくエイリアスとして使用し、単に無視するのではなく、pylupdate がそれを QObject の tr() メソッドと間違え、それに応じてその引数を解析したことです。

これに対してできることはあまりありません (pylupdate にパッチを当てない限り...)。

明らかに、あなたは書くことができることに注意してください

translate = QtCore.QCoreApplication.translate
text = translate("Context", "Source text")

これは何もないよりはましです。

于 2015-03-13T13:12:45.060 に答える