【问题标题】:Loading translations for Qt file dialog为 Qt 文件对话框加载翻译
【发布时间】:2017-03-02 00:47:53
【问题描述】:

我正在尝试使我的 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_()

【问题讨论】:

    标签: qt localization pyqt


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 但是对于原生对话框,翻译肯定已经由操作系统处理,所以你不需要做任何事情。您唯一会看到不匹配的情况是,如果您强制您的应用程序使用与当前语言环境不匹配的翻译器 - 最终用户永远不会出现这种情况。如果您想在开发过程中正确地进行测试,您需要更改自己的系统区域设置,然后确保您的应用程序检测并加载正确的翻译器。
    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2019-03-03
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多