PyQt4: локализация QFileDialog и QFontDialog

Тема: это возможно? Например, могу ли я перевести QtGui.QFileDialog().getSaveFileName() кнопку «Сохранить» на «Сохранить», а «Отменить» на «Игнорировать»? Можно ли создать свой класс на основе QFileDialog/QFontDialog, не изобретая скорость? Кто-то сказал, что эти функции всегда будут переведены, в зависимости от локали ОС. Не поверите, моя русская версия OpenSUSE говорит, что это ложь. :-) И у русской Windows 7 такое поведение. Все строки, которые я вижу в своих системах, английские. Я не националист, но хочу использовать строки на других языках. :-) Спасибо!


person ghostmansd    schedule 03.02.2012    source источник


Ответы (2)


Стандартная установка Qt должна включать около 20 файлов перевода для самой библиотеки Qt.

Объяснение того, как их использовать, можно найти в этом разделе. документации 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_())
person ekhumoro    schedule 03.02.2012
comment
Спасибо! Это было действительно полезно. Только один вопрос: могу ли я использовать разные переводы (по умолчанию Qt и мой собственный) вместе? - person ghostmansd; 04.02.2012
comment
У меня есть некоторые элементы в моем приложении, переведенные через другой файл qm с помощью QTranslator.translate. - person ghostmansd; 04.02.2012
comment
@ghostmansd. Да, вы можете установить несколько переводчиков. Поиск переводов выполняется в обратном порядке, поэтому вы, вероятно, захотите установить свой собственный qm файл последним (см. здесь). - person ekhumoro; 04.02.2012

Я уже нашел решение: файлы qm. Вы можете получить их из файлов ts, используя lrelease.

person ghostmansd    schedule 03.02.2012