我想使用QTranslator来使用英文文本标签,并且软件仍然显示德文标签。PySide Qt tr()不翻译,翻译()确实 - 上下文错误?
不幸的是,我的应用程序不会翻译,除非我指定上下文。 以下静态函数实例化QApplication并添加所需的翻译器。
第一张照片正确地将'Apple2'翻译为'Apfel2'。 Qt Linguist中的上下文也有上下文'app'。 虽然第二次打印不会翻译。类(在相同的python文件中定义)中的调用tr()
也不会翻译。
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
编辑:
的静态函数的部分是正确的。应用程序的上下文是QApplication。尽管如此,这对QMainWindow子类没有帮助。我相应地更新了代码。通过pyside-lupdate为类生成的上下文是主窗口:
视图
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 = QApplication()
app_translator = QTranslator()
app_translator.load(QLocale.system().name(), 'i18n')
app.installTranslator(app_translator)
return app
控制器
def initiate():
model.initiate_mongodb()
app = view.load_application()
main_window = view.MainWindow()
main_window.show()
sys.exit(app.exec_())
解决方案: 到我的问题的解决方案是, QTranslator没有任何父母。 QTranslator(应用程序)解决了我的问题。
正如我上面写的那样,翻译器正确加载了.qm文件。另外app.translate()正在工作,这只有在正确加载的转换器的情况下才有可能。我也尝试了绝对路径,没有任何改变。 – Josch 2015-02-07 19:37:55
@Josch。你的问题没有真正说清楚,但无论如何,我已经用不同的解释更新了我的答案。 – ekhumoro 2015-02-07 23:54:09
对不起,我认为这是由一个词的工作翻译所隐含的。 我也更新了我的问题。感谢您的支持。 – Josch 2015-02-08 16:05:08