PyQt5 使用 Qt Linguist 完成语言转换功能,知识点与实例(例子是中英文翻译)
- 前言
- Qt Linguist介绍
- 创建一个完整项目
- 1. 使用Qtdesigner创建ui界面
- 2.写入主界面逻辑
- 3.Qt Linguist创建翻译包
- github项目地址
前言
大概思路是做一个Language工具栏选项,通过点击选项实现中英文界面切换,具体用到了Qt Linguist.exe,工具栏创建与功能连接,下面将详细介绍。
QT Linguist官方例子https://doc.qt.io/qt-5/examples-linguist.html,共有三个例子。
这篇文章写了太多的官方文档介绍,不需要的可以直接跳到创建完整项目的步骤。
Qt Linguist介绍
QT为Qt C++和Qt Quick提供了专用的快捷开发语言翻译的应用,使得权限管理者,翻译者,开发者可以用Qt tools来完成他们的工作。
权限管理者 承担着管理所有应用权限的责任,比如说,调配开发者跟翻译者的工作,还可以用已发布的应用,lupdate tool来同步源代码跟翻译后的,还可以用lrelease tool来创建一个运行时的翻译文件(我理解为语言包)。
翻译者 可以使用Qt Linguist 工具来在应用中翻译文本。不需要计算机知识,只需要你会启动项目,会用文本编辑器。
开发者必须创建可以使用被翻译过的文本的Qt应用。应当帮助译者识别短语出现的上下文。开发人员可以使用教程了解他们的任务。
(虽然官方文档这么说,但是我们应当知道,三个角色一般来说都是程序员扮演的)
QT Linguist 包含在pyqt5-tools中一并安装上了(安装在前一篇文章)。一般在Python文件夹 目录下
venv\Lib\site-packages\pyqt5_tools\Qt\bin
可以找到QT Linguist.exe运行程序。
Qt Linguist提供了多种语言支持,但是没有增加很多开发者的工作
Qt通过只在程序创建的时候,使用翻译者翻译短句,实现对程序的最小开支。在大多数情况下,主窗口只创建一遍,一旦窗口初始化的时候完成翻译,根据需要来选择显示还是隐藏,只有在窗口被创建,销毁的时候才需要翻译者。
创建一个完整项目
主窗口文件MainWin.py UI界面文件test_ui.py
1. 使用Qtdesigner创建ui界面
(在我的文章初探在Pycharm中使用QT开发GUI页面,组件安装配置以及一个完整项目中有详细介绍)
一个label ,两个按钮,实现点击 English按钮 出现英文,点击 简体中文 按钮将其切换为英文,保存为.ui文件,并转换为.py文件
pyuic5 -o test_ui.py test_ui.ui
2.写入主界面逻辑
引入ui格式,建立app窗口
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from test_ui import *
class MyMainForm(QMainWindow,Ui_Form):
def __init__(self,parent = None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyMainForm()
myWin.show()
sys.exit(app.exec_())
PyQt5文档中对各个语句功能的详解,不再赘述
https://www.riverbankcomputing.com/static/Docs/PyQt5/designer.html
3.Qt Linguist创建翻译包
- 首先需要生成一个 .ts 文件,test_ui.py 是要翻译的文件名,zn_CN.ts是要生成的文件名。
E:\Python_project\CSDN>pylupdate5 test_ui.py -ts zn_CN.ts
- 在Python文件夹下,找到Qt Linguist.exe程序,打开刚才生成的.ts文件
Linguist文件夹: venv\Lib\site-packages\pyqt5_tools\Qt\bin
- 注意在进入的时候选择源语言与要翻译的目标语言,这里我选择的是英翻汉,主界面如下:
- 完成所有的字段翻译并保存,作为例子只翻译helloworld这个字段
完成后点击file>release,将翻译好的包保存到当前目录下,得到.qm文件 - 将翻译逻辑写添加到逻辑页面中
完整代码如下:
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtCore import QTranslator
from test_ui import *
class MyMainForm(QMainWindow,Ui_Form):
def __init__(self,parent = None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
#定义翻译家
self.trans = QTranslator()
#将两个按钮链接到槽函数
self.pushButton.clicked.connect(self._tigger_english)
self.pushButton_2.clicked.connect(self._trigger_zh_cn)
def _tigger_english(self):
#加载语言包
self.trans.load("zn_CN")
#获取窗口实例
app = QApplication.instance()
#将翻译家安装到实例中
app.installTranslator(self.trans)
#翻译界面
self.retranslateUi(self)
pass
def _trigger_zh_cn(self):
#加载语言包
self.trans.load("en")
#获取窗口实例
app = QApplication.instance()
#将翻译家安装到实例中
app.installTranslator(self.trans)
self.retranslateUi(self)
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyMainForm()
myWin.show()
sys.exit(app.exec_())
github项目地址
https://github.com/yuuanjiaxiang/CSDN/tree/master/Translation
最后一点自己的叨叨,在学习linguist过程中,看了很多QtLinguist以及pyqt5的官方文档,进步很多,比看博客或者网络搜索得到的更系统更清晰,同时也很煎熬,顶着工地英语压力确实很大,以后还是要多看官方文档,对自己的提升比较快一些吧。不忘初心,砥砺前行,哈哈。