QTextEdit、QTextBrowser右键菜单汉化显示
在我的另一篇博文中讲解了QMessageBox、QColorDialog的汉化显示,现在又发现QTextEdit、QTextBrowser的没有汉化,究其原因就是没有加载汉化文件。
必看关联文章:QMessageBox、QColorDialog、按钮汉化显示
问题分析
在qt_zh_CN.qm中,QTextEdit归属于QTextControl,而qtbase中生成的QTextEdit归属于QWidgetTextControl,因此翻译失效了。
解决方案
在本篇博客关联文章的基础上,在qt_zh_CN.ts中手动增加QWidgetTextControl的xml节点。
具体步骤
注:关联文章中使用的是Qt5.9.9版本,本篇博客使用的是Qt5.14.2,版本不影响翻译效果。
根据你实际使用的Qt版本,下载qtbase源码。例如我当前使用的是Qt5.14.2。
下载地址:https://github.com/qt/qtbase
用QtCreator打开工程qtbase-5.14\src\widgets\widgets.pro
,如下图所示:
在widgets.pro
中增加一行,并保存,此时会自动执行qmake,如果没有自动执行,手动执行qmake即可。
执行完毕后,会在目录下生成widgets.ts
翻译文件。
TRANSLATIONS += widgets.ts
用Qt语言家(Qt Linguist)软件打开widgets.ts
,可以发现是存在QWidgetTextControl
节点的,而原先我们的qt_zh_CN.ts
中却是不存在的。
所以将需要将QWidgetTextControl节点拷贝至qt_zh_CN.ts
中的QTextControl
节点下,并稍作翻译修改即可。
如下图所示:
<context>
<name>QWidgetTextControl</name>
<message>
<location filename="widgets/qwidgettextcontrol.cpp" line="+2317"/>
<source>&Undo</source>
<translation>撤消(&U)</translation>
</message>
<message>
<location line="+4"/>
<source>&Redo</source>
<translation>恢复(&R)</translation>
</message>
<message>
<location line="+7"/>
<source>Cu&t</source>
<translation>剪切(&T)</translation>
</message>
<message>
<location line="+9"/>
<source>&Copy</source>
<translation>复制(&C)</translation>
</message>
<message>
<location line="+9"/>
<source>Copy &Link Location</source>
<translation>复制链接位置(&L)</translation>
</message>
<message>
<location line="+8"/>
<source>&Paste</source>
<translation>粘贴(&P)</translation>
</message>
<message>
<location line="+5"/>
<source>Delete</source>
<translation>删除</translation>
</message>
<message>
<location line="+9"/>
<source>Select All</source>
<translation>选择全部</translation>
</message>
</context>
最后,使用Qt语言家->文件->发布,即可生成新的qt_zh_CN.qm
翻译文件。
ends…