Изменить язык в QT StandardDialogs (QColorDialog)

Я пытался изменить язык QColorDialog с английского на немецкий, но, к сожалению, это не работает. Я использую PyQt.

Что я пробовал до сих пор:

Установка локали для диалога:

      colordialog = QtWidgets.QColorDialog()
colordialog.setLocale(QtCore.QLocale(QtCore.QLocale.German, QtCore.QLocale.Germany))

Установка переводчика на все приложение:

      app = QtWidgets.QApplication(sys.argv)
qt_translator = QtCore.QTranslator()
qt_translator.load("qt_" + QtCore.QLocale.system().name(),
QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath))
app.installTranslator(qt_translator)

1 ответ

Если вы хотите переводить тексты на немецкий язык, вам необходимо установить переводчик немецкого языка, а не языкового стандарта системы. Так жеQColorDialog()показывает диалоговое окно системного цвета, если вы не укажетеDontUseNativeDialogвариант. Сделайте то же самое для «Qt для Python» (PySide2).

      from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *

app = QApplication([])
trans = QTranslator()
trans.load('qt_de',
    QLibraryInfo.location(QLibraryInfo.TranslationsPath))
QCoreApplication.installTranslator(trans)

dlg = QColorDialog(None, options = QColorDialog.DontUseNativeDialog)
dlg.exec()

Конечно, вы можете использовать название системной локали вместо того, чтобы жестко запрограммировать ее, как вы это сделали, если хотите использовать системную локаль.

      trans.load('qt_' + QLocale.system().name(),
    QLibraryInfo.location(QLibraryInfo.TranslationsPath))

Для PyQt5 сделайте следующее.

      from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

app = QApplication([])
trans = QTranslator()
trans.load('qt_de',
    QLibraryInfo.location(QLibraryInfo.TranslationsPath))
QCoreApplication.installTranslator(trans)

dlg = QColorDialog(None)
dlg.setOptions(QColorDialog.DontUseNativeDialog)
dlg.exec()

Но в текущей версии (5.15.9) есть ошибка, которуюqtscript_*.qmфайлы отсутствуют. Поэтому вам следует вручную копировать файлы из другого дистрибутива Qt. Ниже приведен пример копирования файлов из PySide2 в мою среду Linux Anaconda.

      $ cp ~/miniconda3/lib/python3.8/site-packages/PySide2/Qt/translations/qtscript*.qm ~/miniconda3/lib/python3.8/site-packages/PyQt5/Qt5/translations

В PyQt6 описанная выше ошибка была исправлена, и вы можете сделать следующее.

      from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import *

app = QApplication([])
trans = QTranslator()
trans.load('qt_de',
    QLibraryInfo.path(QLibraryInfo.LibraryPath.TranslationsPath))
QCoreApplication.installTranslator(trans)

dlg = QColorDialog(None, options = QColorDialog.ColorDialogOption.DontUseNativeDialog)
dlg.exec()
Другие вопросы по тегам