PyQt:перевод стандартных кнопок
-
19-09-2019 - |
Вопрос
Как я могу легко перевести стандартные кнопки (Да, Нет) из QMessageBox?Я не могу использовать self.tr для этих аргументов, поэтому я хотел бы достичь этого каким-то другим простым способом.Должен ли я использовать всю систему перевода целиком?
Решение
Вот как я это сделал :
Сначала вам нужно скопировать qt_LOCALE.qm
файл в каталог вашего приложения.Мой был :
cp /usr/share/qt4/translations/qt_fr.qm .
Во-вторых, вам необходимо загрузить переводчик для вашего приложения.
application = QApplication(argv)
locale = QLocale.system().name()
qtTranslator = QTranslator()
if qtTranslator.load("qt_"+locale):
application.installTranslator(qtTranslator)
main_window = QMainWindow()
main_window.show()
exit(application.exec_())
Другие советы
Вы уверены, что вам нужно переводить их самостоятельно?В других наборах инструментов стандартные кнопки автоматически переводятся на язык, который использует пользователь.
Самый быстрый способ - это что-то вроде этого:
mymessagebox.button(mymessagebox.Yes).setText("Yes, please!")
mymessagebox.button(mymessagebox.No).setText("No, thanks.")
Смотрите документацию QMessageBox для всех возможных стандартные кнопки.
Если вы хотите, чтобы Да / Нет было переведено на текущий язык, обычно достаточно установить системный язык.В противном случае попробуйте воспользоваться предложением Натима.
Если вам нужны пользовательские тексты:Статические методы, такие как question() и т.д.не допускайте пользовательских текстов кнопок.Это прискорбно, поскольку диалоги "Да" / "Нет" считаются плохим стилем (они не являются описательными, нужно прочитать сообщение целиком, и легко неправильно понять, что означает "Да", а что "Нет", и случайно свести их к нулю).Для пользовательских текстов вы должны использовать QMessageBox напрямую.Я бы предложил написать ваши собственные статические методы, принимающие необязательные тексты кнопок.