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,第二个是sourceText。但是当我在 QtLinguist 中打开我的.ts文件时,它显示context是我的sourceTextsourceText是评论。无论如何,在 QtLinguist 中翻译它之后,我发布.qm文件并运行我的应用程序,但文本不会改变。我只看到通过了sourceText,所以在这个例子中它仍然是'True'而不是我翻译的。

我究竟做错了什么?

4

2 回答 2

2

您需要先加载翻译器,然后翻译功能才能工作。您可以使用如下代码执行此操作:

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

a是您使用以下代码创建的“app”对象:

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 回答