我想使用 QTranslator 以便能够使用英文文本标签,并且仍然让软件显示德文标签。
不幸的是,我的应用程序不会翻译,除非我指定了上下文。以下静态函数实例化 QApplication 并添加所需的转换器。
第一个打印将“Apple2”正确翻译为“Apfel2”。Qt Linguist 中的上下文也有上下文“app”。不过,第二个印刷品没有翻译。tr()类中的调用(在同一个 python 文件中定义)也不翻译。
def load_application():
app = QApplication()
qt_translator = QTranslator()
qt_translator.load('qt_' + QLocale.system().name(), QLibraryInfo.location(QLibraryInfo.TranslationsPath))
app.installTranslator(qt_translator)
app_translator = QTranslator()
r = app_translator.load('i18n/' + QLocale.system().name())
app.installTranslator(app_translator)
print(app.translate('app', 'Apple2'))
print(app.tr('Apple'))
return app
Run Code Online (Sandbox Code Playgroud)
编辑:
静态函数的部分是正确的。应用程序的上下文是 QApplication。但这对 QMainWindow 子类没有帮助。我相应地更新了代码。pyside-lupdate 为类生成的上下文是 MainWindow:
看法
class MainWindow(QMainWindow):
add_model_widget = None
def __init__(self):
QMainWindow.__init__(self)
# Create menu bar
menu_bar = QMenuBar(self)
m_file = QMenu(self.tr('File'), menu_bar)
a_add_model = QAction(QIcon('add.png'), self.tr('Add Jewel'), self)
m_file.addAction(a_add_model)
menu_bar.addMenu(m_file)
self.setMenuBar(menu_bar)
def load_application():
app = …Run Code Online (Sandbox Code Playgroud)