正在加载Qt文件对话框的翻译

时间:2017-03-01 16:15:28

标签: qt localization pyqt

我试图将我的PyQt程序国际化。我加载自己的翻译没有问题,但我注意到文件对话框似乎仍然使用系统区域设置。诸如this之类的答案表明我应该能够通过安装Qt附带的翻译文件来翻译内置的Qt小部件。

我尝试加载Qt提供的德语翻译,但我的文件对话框仍以英文显示。这是否适用于QFileDialog静态函数?难道我做错了什么?

from PyQt5 import QtCore, QtWidgets


class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()

        button = QtWidgets.QPushButton('Show dialog')
        button.clicked.connect(self.showdialog)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(button)

    def showdialog(self):
        QtWidgets.QFileDialog.getOpenFileName()


if __name__ == '__main__':
    app = QtWidgets.QApplication([])

    translator = QtCore.QTranslator()
    if translator.load('qt_de', QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)):
        app.installTranslator(translator)
        print 'qt translations installed'

    win = Window()
    win.show()
    app.exec_()

1 个答案:

答案 0 :(得分:-1)

深入研究文档,我发现了这一点:

  

默认情况下,如果平台将使用平台本机文件对话框   有一个。在这种情况下,否则将使用的小部件   构造对话框不会被实例化,所以相关的访问器   例如layout()和itemDelegate()将返回null。 你可以设置   DontUseNativeDialog选项确保基于小部件   将使用实现而不是本机对话框

所以我猜本机对话框总是使用本机系统语言。我的例子可以通过强制Qt使用(丑陋的)非原生对话

来实现
def showdialog(self):
    dialog = QtWidgets.QFileDialog(self)
    dialog.setOptions(QtWidgets.QFileDialog.DontUseNativeDialog)
    dialog.exec_()