前言
有些時候我們在父類中使用了 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
函式,分別翻譯為 播放
和 新增到
,但是在子類中這些文字仍然會顯示為 Play
和 Add 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 檔案即可。