(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)如下圖所示,程序右鍵菜單變成了中文
(----------------完---------------)