(1)使用Qt的单行和多行文本框时,右键菜单一直显示为英文,在中文环境下使用体验非常不好,我们需要将这些英文翻译为中文。Qt对于一部分语言做了上述右键菜单的翻译,这些翻译文件被保存在Qt安装路径类似于“5.8/mingw53_32/translations/qtbase_*.qm" 的文件中,但没有提供对应的中文翻译(即5.8/mingw53_32/translations/路径下找不到qtbase_zh_CN.qm文件)
(2)通过研究得知,QT5并没有将文本框(QLineEdit、QTextEdit)的右键菜单对应的中文翻译qtbase_zh_CN.ts添加到翻译列表中,上述结论可以从官网下载的QT源码和下面的github仓库中查看得知
https://github.com/qt/qttranslations/tree/5.8/translations(切换分支从QT5.0到QT5.15都没有看到qtbase_zh_CN.ts翻译文件)
(3)由于官方不支持,那么只有自己动手将上述翻译整理出来做成自己的翻译文件
(4)查看源码和其他语言的qtbase_*.ts文件可整理出针对QLineEdit和QTextEdit右键菜单的qtbase_partial_zh_CN.ts翻译文件,内容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>QLineEdit</name>
<message>
<source>&Undo</source>
<translation>撤销</translation>
</message>
<message>
<source>&Redo</source>
<translation>重做</translation>
</message>
<message>
<source>Cu&t</source>
<translation>剪切</translation>
</message>
<message>
<source>&Copy</source>
<translation>复制</translation>
</message>
<message>
<source>&Paste</source>
<translation>粘贴</translation>
</message>
<message>
<source>Delete</source>
<translation>删除</translation>
</message>
<message>
<source>Select All</source>
<translation>选中所有</translation>
</message>
</context>
<context>
<name>QWidgetTextControl</name>
<message>
<source>&Undo</source>
<translation>撤销</translation>
</message>
<message>
<source>&Redo</source>
<translation>重做</translation>
</message>
<message>
<source>Cu&t</source>
<translation>剪切</translation>
</message>
<message>
<source>&Copy</source>
<translation>复制</translation>
</message>
<message>
<source>Copy &Link Location</source>
<translation></translation>
</message>
<message>
<source>&Paste</source>
<translation>粘贴</translation>
</message>
<message>
<source>Delete</source>
<translation>删除</translation>
</message>
<message>
<source>Select All</source>
<translation>选中所有</translation>
</message>
</context>
</TS>
(5)将上述整理出来的qtbase_partial_zh_CN.ts文件使用Qt语言家Linguist打开,然后发布生成qtbase_partial_zh_CN.qm文件
(6)使用如下代码安装生成的qtbase_partial_zh_CN.qm文件:
#include "mainwidget.h"
#include <QApplication>
#include <QTranslator>
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
QTranslator translator;
if (translator.load(QLocale(QLocale::Chinese, QLocale::China),
QString("qtbase_partial"),
QString("_"),
QString(QApplication::applicationDirPath() + "/translations")))
{
a.installTranslator(&translator);
}
MainWidget w;
w.setWindowTitle("文本框右键菜单翻译");
w.show();
return a.exec();
}
(7)再次运行,程序右键菜单即可变成中文