在PyQt的QPlaintTextEdit中翻译(本地化)上下文菜单的最佳方法是什么?

例如 :

popup_menu = self.createStandardContextMenu()popup_menu.insertMenu(popup_menu.actions()[0], QMenu(self.tr("My menu")))

在这里,我可以翻译“我的菜单”(pylupdate4,然后是lrelease),但不能翻译所有其他标准项目,例如“剪切”,“过去”,...

最佳答案

QPlaintTextEdit的上下文菜单由内部的QTextControl类提供(该类也由QTextEdit之类的其他小部件使用),并且每个菜单项的文本都已包装在tr调用中。因此,想要翻译这些字符串的任何应用程序都只需要确保它们为Qt库本身加载了适当的翻译文件。

Qt提供了大约20种语言的翻译文件,通常应将其与Qt库一起安装。这些文件的位置可以通过编程方式确定,如下所示:

>>> from PyQt4 import QtCore
>>> print QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)
/usr/share/qt/translations


如果没有一种语言的翻译文件,则有必要从模板创建一个文件。可以使用Qt的lconvert工具剥离现有的翻译文件来获取模板:

lconvert --drop-translations -o qt_xx.ts qt_fr.qm


有关生成和使用翻译的更多详细信息,请参见here

09-28 12:06