pyqt5应用程序中对话框和主窗口的国际化(翻译)

时间:2018-11-16 07:06:05

标签: python internationalization pyqt5 translation pyside2

我正在尝试将pyside2 / pyqt5编写的小型应用程序翻译成几种语言,例如中文。谷歌搜索后,我设法从菜单->语言->中文中选择了主窗口。但是,菜单->选项的弹出对话框仍为英文版本。似乎翻译信息未传输到对话框。我该如何解决?

基本上,我在设计器中构建了两个ui文件,并转换为两个python文件:一个mainui.py和一个dialogui.py。然后,我使用

将两个python文件转换为一个* .ts文件
pylupdate5 -verbose mainui.py dialogui.py -ts zh_CN.ts

然后,在语言学家中输入翻译词。我可以在对话框中看到项目,这意味着此信息不会丢失。然后,我将文件发布为zh_CN.qm文件。我在下面使用Google云端硬盘所附的所有支持文件。

Supporting files for the question

主文件为

import os
import sys

from PySide2 import QtCore, QtGui, QtWidgets
from mainui import Ui_MainWindow

from dialogui import Ui_Dialog

class OptionsDialog(QtWidgets.QDialog,Ui_Dialog):
    def __init__(self,parent):
        super().__init__(parent)
        self.setupUi(self)
        self.retranslateUi(self)


class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.actionConfigure.triggered.connect(self.showdialog)
        self.actionChinese.triggered.connect(self.change_lang)

    def showdialog(self):
        dlg = OptionsDialog(self)
        dlg.exec_()

    def change_lang(self):
        trans = QtCore.QTranslator()
        trans.load('zh_CN')
        QtCore.QCoreApplication.instance().installTranslator(trans)
    self.retranslateUi(self)



if __name__=='__main__':
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    ret = app.exec_()
    sys.exit(ret)

我认为这应该是一个典型的任务,因为几乎没有应用程序只有一个主窗口。

1 个答案:

答案 0 :(得分:0)

当事件的类型为changeEvent()时,您必须覆盖retranslateUi()方法并调用QEvent::LanguageChange,另一方面,QTranslator对象必须是对象的成员。类,但是它将被删除,并且在调用changeEvent()方法时将不存在。

最后,假设“语言”菜单仅用于建立翻译,则可能的选择是建立.qm的名称作为QAction的数据,并使用{{1} },如下所示:

QMenu