PyQt5 國際化

動態(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)建翻譯包

  1. 首先需要生成一個 .ts 文件,first.py 是要翻譯的文件名,zn_CN.ts 是要生成的文件名:
$ pylupdate5 first.py -ts zn_CN.ts
  1. 接著,使用 Qt Linguist.exe 打開剛才生成的 .ts 文件:
$ linguist zn_CN.ts

彈出如下界面:

點擊 OK 按鈕,進入界面:

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

完整代碼如下:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容