Pyqt5多语言的简单实现步骤与偷懒避坑

本文详细介绍了如何在PyQt5应用中实现多语言支持,包括使用tr()函数标记待翻译文本,通过pylupdate5生成.ts文件,使用Qt语言家进行翻译,以及在程序中加载翻译文件的步骤。同时,文中提到了一些常见问题及解决方案,如避免在tr()中使用中文和特殊字符,以及处理翻译文件中类名继承问题。
摘要由CSDN通过智能技术生成

写在前面

本文编纂于 2021年2月 。由于大家很少会用到Pyqt的多语言,此时网上的信息大部分比较陈旧,且对像我这样的外行不友好,故有此文。

基本步骤

修改GUI代码

在要被翻译的字符串上用tr()方法括起来:
如图,需要翻译的内容使用tr()包裹
需要注意以下几点:

  1. 不需要翻译的字符串不需要使用tr()来包裹;
  2. 上图self指的是包含需要翻译文字的类(实例),我的是主窗口:
    self所指
  3. 有关tr()的小知识:
    tr()方法
    tr()是PyQt5.QtCore.QObject的方法。很多东西都继承自QObject,包括QWidget,可以参考官方文档官方文档是个极好的东西)。
  4. 一般源程序代码中的内容都使用英文为佳,能够避免很多麻烦:
    懂的都懂
    比如,tr()包裹的内容中如果出现中文,会出现这样的问题:
    乱码看到没
    “棒打鹧鸪”在Qt语言家里成了乱码,并且最后制作出来的语言包这一句不会生效(语言包和程序匹配不成功):
    仔细对比一下两张图
    Unicode代码也有类似的问题:
    源代码
    好家伙,Qt语言家中特殊字符的斜杠直接消失(普通的转义可以用):
    我的推推棒去哪里了
    程序效果:
    装B失败
    所以在写源程序的时候尽量避免这两种东西吧,我突然觉得自己重新写一遍可能比这好用

创建语言文件

在CMD或者PowerShell中使用类似命令即可安装pyqt5-tools(记得给PIP换源或者科学上网):

pip install pyqt5-tools

在CMD或者PowerShell中使用类似命令生成翻译的源文件(*.ts):

pylupdate5 文件名.py -ts zh_CN.ts

其中文件名指的是刚刚使用了tr()的代码文件;zh_CN.ts是输出的文件,可以使用Qt语言家打开:
Qt语言家
如图,Qt语言家与Qt设计师在同一个目录下,具体安装位置不一定,请自行探索。
需要注意的不多,亲测以下流程可以:
正确操作
而这样并不可以:
不知道为啥不行

使用Qt语言家进行翻译

有手就行,不多解释:
唉?我手呢?
记得时常保存:
保存
点击发布即可得到下一步需要的*.qm文件:
发布

修改程序

在实例化QApplication的那个文件引用:

from PyQt4.QtCore import QTranslator

最简单的用法可以这样:

trans = QTranslator()
trans.load('zh_CN')
app.installTranslator(trans)

也可以这样:

trans = QTranslator()
trans.load('./src/lang/zh_CN.qm')
app.installTranslator(trans)

使用很灵活(见官方文档)。
需要注意的是,(在最简单的使用中)这三行代码需要在app = QApplication(sys.argv)之后、翻译的窗口实例化之前进行。

至此,翻译的简单使用到此为止了。
更多高级的用法可以参考推荐阅读1中更详细的内容。

疑难杂症解决

  1. 实际上,trans.load()会返回一个bool类型的数据,表示载入是否成功。如果载入不成功,可以尝试换一下文件的路径。
  2. 如果载入成功了界面却没有翻译成功,可能有以下几个原因:
    ①忘记app.installTranslator()这种显而易见的问题,可能性不大;
    ②有一个比较大的坑,就是翻译的UI文件里的类如果被继承了才使用,需要对*.ts文件进行一些手动修改。我的继承关系如图:
    目录结构
    这个mainWindow类处在被翻译的文件里,也是包含被翻译内容的类:
    UI层,被翻译的层
    因此,生成的*.ts文件里前几行是这样的:
    ts文件内容
    其中标红的就是类名;而我对它又继承了一遍,以便于将业务逻辑层分开:
    猪猪男孩的操作
    所以,.ts里的类名需要修改成最终被实例化的那个类名
    被实例化的类
    修改类名
    我使用了EmEditor对
    .ts文件进行修改,防止中文被编成乱码。
    其实直接修改这个文件也能很容易地实现多窗口的翻译。

推荐阅读

  1. Pyqt5在程序中动态修改多界面的语言(英语转中文或者中文转英语)
  2. 将pip源更换到国内镜像

选读

  1. Qt国际化(源码含中文时)的点滴分析

请求大佬补充、指出不足

欢迎爱好者/新手提问、指出不足

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值