前言

有些时候我们在父类中使用了 self.tr('XXX'),使用 Qt Linguist 完成翻译并导出 qm 文件后,发现子类中仍然是英文原文。比如下面这段代码:

class AlbumCardBase(QWidget):
""" 专辑卡基类 """ def __init__(self, parent=None):
super().__init__(parent=parent)
self.playButton = BlurButton(
self,
(30, 65),
":/images/album_tab_interface/Play.png",
self.coverPath,
self.tr('Play')
)
self.addToButton = BlurButton(
self,
(100, 65),
":/images/album_tab_interface/Add.png",
self.coverPath,
self.tr('Add to')
)

父类 AlbumCardBase 中有两处使用了 tr 函数,分别翻译为 播放添加到,但是在子类中这些文本仍然会显示为 PlayAdd to,下面来看看如何解决这个问题。

解决过程

生成的 ts 文件中,有这样一段代码:

<context>
<name>AlbumCardBase</name>
<message>
<location filename="../../components/album_card/album_card_base.py" line="50"/>
<source>Add to</source>
<translation>添加到</translation>
</message>
<message>
<location filename="../../components/album_card/album_card_base.py" line="43"/>
<source>Play</source>
<translation>播放</translation>
</message>
</context>

可以看到上述代码描述了源文的位置和内容以及译文,但是只对父类 AlbumCardBase 起作用。要想对子类应用上述规则,只需复制粘贴再修改 <name> 标签中的类名即可,比如 AlbumCard 为子类,那么只需添加下述代码:

<context>
<name>AlbumCard</name>
<message>
<location filename="../../components/album_card/album_card_base.py" line="50"/>
<source>Add to</source>
<translation>添加到</translation>
</message>
<message>
<location filename="../../components/album_card/album_card_base.py" line="43"/>
<source>Play</source>
<translation>播放</translation>
</message>
</context>

完成上述步骤后导出 qm 文件即可。

如何在 pyqt 中解决国际化 tr() 函数不起作用的问题的更多相关文章

  1. 如何在 pyqt 中解决启用 DPI 缩放后 QIcon 模糊的问题

    问题描述 如今显示器的分辨率越来越高,如果不启用 DPI 缩放,软件的字体和图标在高分屏下就会显得非常小,看得很累人.从 5.6 版本开始,Qt 便能支持 DPI 缩放功能,Qt6 开始这个功能是默认 ...

  2. 如何在pyqt中自定义无边框窗口

    前言 之前写过很多关于无边框窗口并给窗口添加特效的博客,按照时间线罗列如下: 如何在pyqt中实现窗口磨砂效果 如何在pyqt中实现win10亚克力效果 如何在pyqt中通过调用SetWindowCo ...

  3. 如何在pyqt中在实现无边框窗口的同时保留Windows窗口动画效果(一)

    无边框窗体的实现思路 在pyqt中只要 self.setWindowFlags(Qt.FramelessWindowHint) 就可以实现边框的去除,但是没了标题栏也意味着窗口大小无法改变.窗口无法拖 ...

  4. 如何在pyqt中给无边框窗口添加DWM环绕阴影

    前言 在之前的博客<如何在pyqt中通过调用SetWindowCompositionAttribute实现Win10亚克力效果>中,我们实现了窗口的亚克力效果,同时也用SetWindowC ...

  5. 如何在pyqt中实现窗口磨砂效果

    磨砂效果的实现思路 这两周一直在思考怎么在pyqt上实现窗口磨砂效果,网上搜了一圈,全都是 C++ 的实现方法.正好今天查python的官方文档的时候看到了 ctypes 里面的 HWND,想想倒不如 ...

  6. 如何在pyqt中实现win10亚克力效果

    亚克力效果的实现思路 上一篇博客<如何在pyqt中实现窗口磨砂效果> 中实现了win7中的Aero效果,但是和win10的亚克力效果相比,Aero还是差了点内味.所以今天早上又在网上搜了一 ...

  7. 如何在pyqt中通过调用 SetWindowCompositionAttribute 实现Win10亚克力效果

    亚克力效果 在<如何在pyqt中实现窗口磨砂效果>和<如何在pyqt中实现win10亚克力效果>中,我们调用C++ dll来实现窗口效果,这种方法要求电脑上必须装有MSVC.V ...

  8. 如何在 pyqt 中捕获并处理 Alt+F4 快捷键

    前言 如果在 Windows 系统的任意一个窗口中按下 Alt+F4,默认行为是关闭窗口(或者最小化到托盘).对于使用了亚克力效果的窗口,使用 Alt+F4 最小化到托盘,再次弹出窗口的时候可能出现亚 ...

  9. 详解如何在Laravel中增加自定义全局函数

    http://www.php.cn/php-weizijiaocheng-383928.html 如何在Laravel中增加自定义全局函数?在我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么 ...

随机推荐

  1. 【剑指Offer】二叉树中和为某一值的路径 解题报告(Python)

    [剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...

  2. 求最大公因数和最小公倍数(C++实现)

    求两个正整数之最大公因子的算法(辗转相除法) 最大公约数是指能同时整除它们的最大正整数 基本原理:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数. 就如有 a = 122, b =  54 ...

  3. Red Scarf abc171_E

    题目大意 除去一个元素后的异或和 题目分析 首先异或有交换律 \(a \ \mathrm{xor} \ a=0\) \(0 \ \mathrm{xor} \ a=a\) 可以求出异或和,在异或当前元素 ...

  4. win10 防火墙配置 允许局域网其他设备访问本地工程

    1.进入防护墙并找到高级设置 2.选择属性 3.将入站连接设为允许,有三个别忘了,[域配置文件,专用配置文件,公用配置文件]

  5. [ css ] 实现漂亮的输入框动画(借鉴自panjiachen的后台管理项目)

    效果预览 HTML <div class="l-custom-input"> <input size="large" id="l-i ...

  6. vue爬坑之路(插件安装)

    npm install vue-table-with-tree-grid --save import ZkTable from 'vue-table-with-tree-grid' Vue.use(Z ...

  7. SYCOJ2100摆动序列

    题目-摆动序列 (shiyancang.cn) 直接分成两部分,插入即可.只有一个地方不对,那就是符号.两个大的放一个小的,两个小的放一个大的.那么每次的大的放最大的,每次的小的放其次小的,用完就不用 ...

  8. MongoDB-基础知识学习(一)

    概述 最近mongodb在互联网的活跃度直线上升,并且我们公司也使用了mongoDB 3.6 作为生产重要的数据库,我们项目组要监控mongodb的op.log日志,在此整理以前学习的知识,为以后备份 ...

  9. Vue3项目的简单搭建与项目结构的简单介绍

    Vue3项目的创建与运行 本文记录下自己近期学习的Vue3项目的创建,以及如何去运行一个Vue应用,同时包括对Vue项目结构进行一个简单的介绍. 一.node与npm的安装 通常平常进行开发的同学应该 ...

  10. Chromium Windows Build

    https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/windows_build_instructions.md ...