我想使用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