当前位置: 首页 > news >正文

【Python】基于界面库PyQt5+QTLinguist的多语言切换功能实现

        之前的文章中,利用QT Designer设计了一个简单的ui界面,并转换成py文件(具体参考【Python】基于界面库PyQt5+Qt Dsigner的环境配置和界面绘制)。

        现有一个为Python+QT中实现的程序,添加中英文切换功能的需求,可以用QT自带的 pylupdate5 + QTLinguist 工具实现快捷的字符提取、翻译、转换,步骤如下:

一 用pylupdate5将.py文件转换为翻译文件(.ts)

        将需要翻译的.py文件,利用 pylupdate5 工具转换成.ts文件。这里提供两种方式:

        (1)使用命令行直接操作(建议:加上 -noobsolete 参数,这样可以保证在修改完py文件之后,生成新.ts中,删除旧有词条):

pylupdate5 -noobsolete xxx.py -ts xxx.ts

        (2)使用 pycharm 就更方便了,可以在”文件——设置——工具——外部工具“中添加对应的工具和实参,实现一键转换生成(实参和目录根据自己需要填写):

        注意:可以一次性将多个.py文件转换为一个ts文件,如下所示:

pylupdate5 -noobsolete xxx.py yyy.py zzz.py -ts all.ts

二 用QTLinguist将.ts文件翻译并转换为.qm文件

        (1)在外部工具中添加 QTLinguist ,并通过 QTLinguist 打开上面转换而来的.ts文件:

        (2)打开文件之后,语言设置如下,点击OK确认:

        (3)对照中文字符自行翻译:

        (4)全部翻译完成之后,选择”文件——发布“,生成.qm文件;

        (5)在QRC文件中登记.qm文件,并使用 PyRcc5 编译生成py文件:

<!DOCTYPE RCC>
<RCC version="1.0"><qresource prefix="/tr"><file>ui/english.qm</file><file>core/english_core.qm</file></qresource>
</RCC>

三 程序中使用.qm文件实现多语言切换

        (1)包含QT翻译器类:

from PyQt5.QtCore import QTranslator

        (2)初始化中创建中英文翻译器,我这边创建了两个翻译器,分别翻译不同类别的文件:

def __init__(self):self.translator_ui = QTranslator()      # 用来翻译QT Designer生成原始界面中内容的翻译器(ui文件夹中)self.translator_core = QTranslator()    # 用来翻译自己创建诸多文件中内容的翻译器(core文件夹中)self.loadLanguage(self.now_language)  # 加载语言配置(新语言设置只在重启后生效)self.retranslateUi(self)    # 重新翻译主窗口

        其中, 如果使用QT Designer创建的文件,自带retranslateUi()接口;如果是自己创建的文件,该接口需要自己实现。

        (3)我这边是根据 self.now_language 变量值,进行语言切换。具体情况具体分析:

def loadLanguage(self, language):"""加载新语言"""# 移除旧的翻译QApplication.instance().removeTranslator(self.translator_ui)QApplication.instance().removeTranslator(self.translator_core)# 根据语言选择翻译文件if language == "en_US":# 从qrc资源文件加载英文翻译if self.translator_ui.load(TRANSLATE_UI_FILE):  # 更新完qm翻译文件之后,需要把qrc文件也用PyRCC5重编一下QApplication.instance().installTranslator(self.translator_ui)if self.translator_core.load(TRANSLATE_CORE_FILE):  # 更新完qm翻译文件之后,需要把qrc文件也用PyRCC5重编一下QApplication.instance().installTranslator(self.translator_core)else:# 切换到中文时,移除所有翻译(使用原始中文界面)。不需要加载任何翻译文件,因为界面默认就是中文pass

        其中,.qm文件路径分别为:

TRANSLATE_UI_FILE   = ":/tr/ui/english.qm"          # QT Designer生成原始界面中内容(ui文件夹中)的翻译文件
TRANSLATE_CORE_FILE = ":/tr/core/english_core.qm"   # 自己创建诸多文件中内容(core文件夹中)的翻译文件

        (4)综上即可实现中英文切换功能。

四 自己手写的程序中字符翻译

        用QT Designer生成的文件自带 _translate 进行修饰,且自带 retranslateUi 接口进行刷新,所以转换、翻译操作起来比较方便。

        如果是自己创建文件中的文本,需要额外自行添加文本修饰器,如下所示:

_translate= QtCore.QCoreApplication.translate
OpeWidget.setWindowTitle(_translate("OpeWidget", "基本操作"))

        这里推荐一个更简单的修饰方法,直接用self.tr()来修饰所有自己编写的字符串

OpeWidget.setWindowTitle(self.tr("基本操作"))

        所有经过 self.tr() 修饰的字符串,都可以被 pylupdate5 工具识别,并通过 QTLinguist 工具执行翻译,其他步骤就和上面的步骤一、二、三相同了。

五 注意事项

【1】用 pylupdate5 工具转换时,建议加上 -noobsolete 参数,这样可以保证在修改完py文件之后,生成新.ts中,删除旧有词条;

【2】用 pylupdate5 工具转换时,可以一次性将多个.py文件转换为一个ts文件;

【3】建议用qt自带的 pyrcc5 工具进行资源(翻译文件、图片等)管理;

http://www.dtcms.com/a/390213.html

相关文章:

  • Flutter 组件介绍:TickerMode
  • SQL 聚合函数总结:COUNT、SUM、AVG、MAX、MIN 详解
  • 资深专业新媒体营销数字营销培训老师商学院教授课程老师培训讲师唐兴通讲授10大经典社群私域案例:Lululemon的热汗式信仰社群运营社群活动
  • 玉米病虫害数据集检测识别数据集:近4k图像,7类,yolo标注
  • Batch Size与预热导致深度学习模型推理时间忽快忽慢
  • 过滤器(Filter)与拦截器(Interceptor)知识点总结
  • 深度学习与机器学习
  • Linux服务器从零开始-mysql安装
  • Emacs 折腾日记(三十)——打造C++ IDE 续
  • 解密DNS:互联网的隐形导航系统
  • Mysql修改用户密码,修改MySQL密码如何安全的步骤是什么
  • PS练习2:将图片贴入实际环境中
  • cocos shader 流光环绕
  • kali nethunter 开启ssh
  • vue3滚动到顶部钩子函数+组件简单示例
  • Linux 开发工具(3)
  • Hive 运行
  • PPT中为图片添加透明渐变的蒙版
  • 数字签名过程中的消息摘要和加密的作用
  • Unity物理系统笔记
  • 区分同步(Synchronous)和异步(Asynchronous)
  • 隐语开源隐私计算SecretFlow,实测性能提升10倍,纵向联邦SecureBoost算法(已开源)
  • 云南食品安全管理员考试都考哪些知识点
  • AAAI2025 | 视觉语言模型 | 西电等提出少样本语言驱动多模态分类模型DiffCLIP
  • Coze(扣子)零基础开发02-建一个简单机器人
  • 混合架构(SpringCloud+Dubbo)的整合方案与适用场景(三)
  • SPI 通信协议
  • vue3学习日记(十六):路由配置详解
  • 河南省 ERA5 日值气象数据处理教程(2020–2025)
  • 继承和多态常见面试问题解析