PyQt 内置一套机制,可以为你的 PyQt 程序添加多种界面语言。
本文示例代码主要以PyQt5为主。
标记出需要多语言的文本
首先标记程序中需要多语言支持的文本,用QObject.tr()
方法标记出即可:
1 | class Mwindow(QtGui.QDialog): |
由于QObject是大部分类的基类,所以直接使用self.tr()
即可。
但tr()
方法在PyQt5中已经不建议使用了,建议使用translate()
方法:
1 | class A(QObject): |
如果你跟我一样是先用Qt Designer 画的UI文件,并且要翻译的文本都写在UI文件中了,那就更简单一些。在画UI文件时注意有文本的组件中text属性下的“可翻译的”选项要保持勾选状态,默认是勾选的。这样在通过ui生成py文件时就自动在文本外添加了translate()
方法。
转换并编辑翻译文件
首先通过包含文本的py文件生成翻译文件:
pylupdate5 main_ui.py -ts zh_CN.ts
PyQt4 中是pylupdate4
。
linguist 编辑
接着用安装PyQt4程序包时附带的,或单独安装的pyqt5-tools中包含的linguist
程序打开这个文件,一个一个编辑即可。编辑完成后点击菜单栏“文件–发布”即可生成所需的.qm文件。
手动编辑
如果没有linguist也没关系,.ts文件就是一个xml文件,直接用文本编辑器编辑即可。
未翻译的xml结构为:
1 | <message encoding="UTF-8"> |
翻译完成的xml结构为:
1 | <message utf8="true"> |
对照你的.ts文件就知道怎么修改了。
手动翻译完成后还需要用lrelease程序将.ts转换成.qm:
lrelease en.ts
lrelease程序在PyQt4程序目录下或pyqt5-tools中。
载入.qm文件切换语言
最后一步就是载入.qm文件了。
初始化界面时修改语言
如果你先判断系统语言再根据系统语言切换界面语言的话就要在界面初始化时载入.qm文件:
1 | if __name__ == '__main__': |
注意要在界面show之前installTranslator
。
运行时动态修改语言
如果你希望程序运行时可以动态修改语言,比如通过点击菜单栏的english_action
切换到英文,可以通过触发以下方法实现:
1 | def to_englist(self): |
其中self.retranslateUi(self)
方法是ui转py文件时自动生成的一个方法,代码示例如下:
1 | def retranslateUi(self, MainUI): |
如果不是Qt Designer画的界面那就需要手动写一个类似retranslateUi
的函数。
参考资料: