Localization PyQt4:QFileDialog和QFontDialog本地化

Localization PyQt4:QFileDialog和QFontDialog本地化,localization,pyqt,pyqt4,qfiledialog,Localization,Pyqt,Pyqt4,Qfiledialog,主题:可能吗?例如,我可以将QtGui.QFileDialog().getSaveFileName()按钮“保存”转换为“保存”,将“取消”转换为“忽略”吗?是否可以基于QFileDialog/QFontDialog创建我的类而不发明速度? 有人说,这些函数将始终被翻译,这取决于操作系统的语言环境。不要相信,我的俄文版OpenSUSE说这是一个谎言。:-)俄罗斯Windows 7也有这样的行为。我在系统上看到的所有字符串都是英语。我不是民族主义者,但我想在其他语言中使用字符串。:-)谢谢 我已经

主题:可能吗?例如,我可以将
QtGui.QFileDialog().getSaveFileName()
按钮“保存”转换为“保存”,将“取消”转换为“忽略”吗?是否可以基于
QFileDialog/QFontDialog
创建我的类而不发明速度?
有人说,这些函数将始终被翻译,这取决于操作系统的语言环境。不要相信,我的俄文版OpenSUSE说这是一个谎言。:-)俄罗斯Windows 7也有这样的行为。我在系统上看到的所有字符串都是英语。我不是民族主义者,但我想在其他语言中使用字符串。:-)谢谢

我已经找到了一个解决方案:qm文件。您可以使用
lrelease

ts文件中获取它们。标准的Qt安装应该包括Qt库本身的20个左右的翻译文件

有关如何使用它们的说明,请参阅Qt i18n文档的第页

下面是一个基本的PyQt4示例:

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.buttons = QtGui.QDialogButtonBox(self)
        button = self.buttons.addButton(QtGui.QDialogButtonBox.Open)
        button.clicked.connect(self.handleOpen)
        button = self.buttons.addButton(QtGui.QDialogButtonBox.Close)
        button.clicked.connect(self.close)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.buttons)

    def handleOpen(self):
        dialog = QtGui.QFileDialog()
        dialog.exec_()

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    translator = QtCore.QTranslator()
    if len(sys.argv) > 1:
        locale = sys.argv[1]
    else:
        locale = QtCore.QLocale.system().name()
    translator.load('qt_%s' % locale,
        QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath))
    app.installTranslator(translator)
    window = Window()
    window.show()
    sys.exit(app.exec_())

谢谢这真的很有用。只有一个问题:我可以同时使用不同的翻译(默认Qt和我自己的翻译)吗?我的应用程序中有一些元素,通过另一个qm文件使用QTranslator.translate进行翻译。@ghostmansd。是的,您可以安装多个转换器。翻译的查找是按相反的顺序进行的,因此您可能希望最后安装自己的
qm
文件(请参阅)。