動態(tài)修改界面的語言
Qt 提供 Qt Linguist.exe 動態(tài)修改界面的語言。Qt 為 Qt C++ 和 Qt Quick 提供了專用的快捷開發(fā)語言翻譯的應(yīng)用,使得權(quán)限管理者,翻譯者,開發(fā)者可以用 Qt tools 來完成他們的工作。
- 權(quán)限管理者(Release managers):承擔著管理所有應(yīng)用權(quán)限的責任,比如說,調(diào)配開發(fā)者跟翻譯者的工作,還可以用已發(fā)布的應(yīng)用,lupdate tool 來同步源代碼跟翻譯后的,還可以用 lrelease tool 來創(chuàng)建一個運行時的翻譯文件(我理解為語言包)。
- 翻譯者(Translators):可以使用 Qt Linguist 工具來在應(yīng)用中翻譯文本。不需要計算機知識,只需要你會啟動項目,會用文本編輯器。
- 開發(fā)者(Developers)必須創(chuàng)建可以使用被翻譯過的文本的 Qt 應(yīng)用。應(yīng)當幫助譯者識別短語出現(xiàn)的上下文。開發(fā)人員可以使用教程了解他們的任務(wù)。
更加詳細的信息見:Internationalization with Qt。
Qt Linguist 提供了多種語言支持,但是沒有增加很多開發(fā)者的工作。Qt 通過只在程序創(chuàng)建的時候,使用翻譯者翻譯短句,實現(xiàn)對程序的最小開支。在大多數(shù)情況下,主窗口只創(chuàng)建一遍,一旦窗口初始化的時候完成翻譯,根據(jù)需要來選擇顯示還是隱藏,只有在窗口被創(chuàng)建,銷毀的時候才需要翻譯者。
概述
參考自:Overview of the Translation Process
開發(fā)人員使用簡單但特殊的語法以開發(fā)人員的母語將這些短語輸入到源代碼中,以標識這些短語需要翻譯。Qt 工具為每個短語提供了上下文信息,以幫助翻譯人員,并且開發(fā)人員能夠在必要時向短語添加其他上下文信息。
版本管理器(The release manage)會生成一組從源文件生成的翻譯文件,并將這些文件傳遞給翻譯器。翻譯人員使用 Qt 語言學(xué)家打開翻譯文件,輸入翻譯內(nèi)容,再將結(jié)果保存回翻譯文件中,接著將其傳遞回版本管理器。然后,版本管理器會生成這些翻譯文件的快速精簡版本,以供應(yīng)用程序使用。
這些工具旨在隨著應(yīng)用程序的更改和發(fā)展而反復(fù)使用,以保留現(xiàn)有翻譯并輕松確定需要哪些新翻譯。Qt Linguist 還提供了短語手冊功能,以幫助確保在多個應(yīng)用程序和項目之間的一致翻譯。
Qt Linguist 和 lupdate 能夠?qū)牒蛯?dǎo)出 XML 本地化交換文件格式(XLIFF)文件,從而可以利用與此格式配合使用的工具和翻譯服務(wù)。有關(guān)使用這些文件的更多信息,請參見 Translators。
1 創(chuàng)建一個簡單的界面
先使用 Qt Designer 創(chuàng)建如下圖的界面:

并保存文件為 first.ui,在 vscode 的控制臺輸入命令:
$ pyuic5 first.ui -o first.py
獲得 first.py 文件,并編寫主程序文件 test.py:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from first import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MainWindow()
myWin.show()
sys.exit(app.exec_())
2 Qt Linguist 創(chuàng)建翻譯包
- 首先需要生成一個
.ts文件,first.py是要翻譯的文件名,zn_CN.ts是要生成的文件名:
$ pylupdate5 first.py -ts zn_CN.ts
- 接著,使用
Qt Linguist.exe打開剛才生成的.ts文件:
$ linguist zn_CN.ts
彈出如下界面:

點擊 OK 按鈕,進入界面:

- 完成所有的字段翻譯并保存,作為例子只翻譯 hello world 這個字段,最后,點擊
文件按鈕,選中發(fā)布選項,將翻譯好的包保存到當前目錄下,得到.qm文件:

- 將翻譯邏輯寫添加到邏輯頁面中
完整代碼如下:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from first import Ui_MainWindow
from PyQt5.QtCore import QTranslator
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self,parent = None):
super().__init__(parent)
self.setupUi(self)
#定義翻譯家
self.trans = QTranslator()
#將兩個按鈕鏈接到槽函數(shù)
self.pushButton.clicked.connect(self._tigger_english)
self.pushButton_2.clicked.connect(self._trigger_zh_cn)
def _tigger_english(self):
#加載語言包
self.trans.load("en")
#獲取窗口實例
app = QApplication.instance()
#將翻譯家安裝到實例中
app.installTranslator(self.trans)
#翻譯界面
self.retranslateUi(self)
pass
def _trigger_zh_cn(self):
#加載語言包
self.trans.load("zn_CN")
#獲取窗口實例
app = QApplication.instance()
#將翻譯家安裝到實例中
app.installTranslator(self.trans)
self.retranslateUi(self)
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MainWindow()
myWin.show()
sys.exit(app.exec_())
最終,實現(xiàn)界面語言的國際化。更多信息參考:Qt Linguist Manual: Release Manager|Qt Linguist Manual: Translators|Qt Linguist Manual: Developers