{
"code": 200,
"data": {
"categoryId": "2",
"categoryName": "python",
"content": "# 前言\n\n有些时候我们在父类中使用了 `self.tr('XXX')`,使用 Qt Linguist 完成翻译并导出 qm 文件后,发现子类中仍然是英文原文。比如下面这段代码:\n\n```python\nclass AlbumCardBase(QWidget):\n \"\"\" 专辑卡基类 \"\"\"\n\n def __init__(self, parent=None):\n super().__init__(parent=parent)\n self.playButton = BlurButton(\n self,\n (30, 65),\n \":/images/album_tab_interface/Play.png\",\n self.coverPath,\n self.tr('Play')\n )\n self.addToButton = BlurButton(\n self,\n (100, 65),\n \":/images/album_tab_interface/Add.png\",\n self.coverPath,\n self.tr('Add to')\n )\n```\n\n父类 `AlbumCardBase` 中有两处使用了 `tr` 函数,分别翻译为 `播放` 和 `添加到`,但是在子类中这些文本仍然会显示为 `Play` 和 `Add to`,下面来看看如何解决这个问题。\n\n# 解决过程\n\n生成的 ts 文件中,有这样一段代码:\n\n```xml\n<context>\n <name>AlbumCardBase</name>\n <message>\n <location filename=\"../../components/album_card/album_card_base.py\" line=\"50\"/>\n <source>Add to</source>\n <translation>添加到</translation>\n </message>\n <message>\n <location filename=\"../../components/album_card/album_card_base.py\" line=\"43\"/>\n <source>Play</source>\n <translation>播放</translation>\n </message>\n</context>\n```\n\n可以看到上述代码描述了源文的位置和内容以及译文,但是只对父类 `AlbumCardBase` 起作用。要想对子类应用上述规则,只需复制粘贴再修改 `<name>` 标签中的类名即可,比如 `AlbumCard` 为子类,那么只需添加下述代码:\n\n```xml\n<context>\n <name>AlbumCard</name>\n <message>\n <location filename=\"../../components/album_card/album_card_base.py\" line=\"50\"/>\n <source>Add to</source>\n <translation>添加到</translation>\n </message>\n <message>\n <location filename=\"../../components/album_card/album_card_base.py\" line=\"43\"/>\n <source>Play</source>\n <translation>播放</translation>\n </message>\n</context>\n```\n\n完成上述步骤后导出 qm 文件即可。\n",
"createTime": "2022-03-14 00:27:57",
"id": "1",
"summary": "前言\n有些时候我们在父类中使用了 self.tr('XXX'),使用 Qt Linguist 完成翻译并导出 qm 文件后,发现子类中仍然是英文原文。比如下面这段代码:\nclass AlbumCardBase(QWidget):\n """ 专辑卡基类 "",
"tags": [
{
"id": "2",
"name": "python"
},
{
"id": "8",
"name": "pyqt"
}
],
"thumbnail": "https://i.niupic.com/images/2022/03/14/9Ws2.png",
"title": "如何在 pyqt 中解决国际化 tr() 函数不管用的问题",
"viewCount": "5"
},
"msg": "操作成功"
}