自从Qt升级到5.x,程序中的
对话框中的标准
按钮文字就又变成英文了,尽管已经加载了qt_zh_CN.qm,忍了好久了,今天解决了一下,附上我自己用的Qt 5.3.1&Qt 5.5.1的qt_zh_CN.qm文件。下面是增加翻译方法:
1. 假设$QTDIR为Qt安装
目录,对应源码目录为$QTDIR/src,那么找到qt_zh_CN.ts文件,我们要在里面增加翻译内容,该
文件位于$QTDIR/src/qttranslations/translations目录下.
2. 找到QDialogButtonBox中标准按钮翻译的原始出处,在$QTDIR/src/qtbase/src/gui/kernel/qplatformtheme.cpp文件中,在该文件中,找到defaultStandardButtonText()函数的实现处,就能看到翻译调用:
QString QPlatformTheme::defaultStandardButtonText(int button)
{
switch (button) {
case QPlatformDialogHelper::Ok:
return QCoreApplication::translate("QPlatformTheme", "OK");
case QPlatformDialogHelper::Save:
return QCoreApplication::translate("QPlatformTheme", "Save");
case QPlatformDialogHelper::SaveAll:
return QCoreApplication::translate("QPlatformTheme", "Save All");
case QPlatformDialogHelper::Open:
return QCoreApplication::translate("QPlatformTheme", "Open");
case QPlatformDialogHelper::Yes:
return QCoreApplication::translate("QPlatformTheme", "&Yes");
case QPlatformDialogHelper::YesToAll:
return QCoreApplication::translate("QPlatformTheme", "Yes to &All");
case QPlatformDialogHelper::No:
return QCoreApplication::translate("QPlatformTheme", "&No");
case QPlatformDialogHelper::NoToAll:
return QCoreApplication::translate("QPlatformTheme", "N&o to All");
case QPlatformDialogHelper::Abort:
return QCoreApplication::translate("QPlatformTheme", "Abort");
case QPlatformDialogHelper::Retry:
return QCoreApplication::translate("QPlatformTheme", "Retry");
case QPlatformDialogHelper::Ignore:
return QCoreApplication::translate("QPlatformTheme", "Ignore");
case QPlatformDialogHelper::Close:
return QCoreApplication::translate("QPlatformTheme", "Close");
case QPlatformDialogHelper::Cancel:
return QCoreApplication::translate("QPlatformTheme", "Cancel");
case QPlatformDialogHelper::Discard:
return QCoreApplication::translate("QPlatformTheme", "Discard");
case QPlatformDialogHelper::Help:
return QCoreApplication::translate("QPlatformTheme", "Help");
case QPlatformDialogHelper::Apply:
return QCoreApplication::translate("QPlatformTheme", "Apply");
case QPlatformDialogHelper::Reset:
return QCoreApplication::translate("QPlatformTheme", "Reset");
case QPlatformDialogHelper::RestoreDefaults:
return QCoreApplication::translate("QPlatformTheme", "Restore Defaults");
default:
break;
}
return QString();
}
3. 打开Qt Command Prompt,切换到$QTDIR/src/qtbase/bin目录下,
执行下面的命令:
lupdate ../src/gui/kernel/qplatformtheme.cpp -ts qplatformtheme.ts
4. 将qplatformtheme.ts文件中context节点(包括context)内容全部插入到前面的qt_zh_CN.ts中的末尾根节点</TS>之前
5. 修改qt_zh_CN.ts中新加入到这些内容并做翻译,最后翻译完类似下面的内容(但行号随着Qt版本的不同而不同):
<context>
<name>QPlatformTheme</name>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="657"/>
<source>OK</source>
<translation>确定</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="659"/>
<source>Save</source>
<translation>保存</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="661"/>
<source>Save All</source>
<translation>全部保存</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="663"/>
<source>Open</source>
<translation>打开</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="665"/>
<source>&Yes</source>
<translation>是(&Y)</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="667"/>
<source>Yes to &All</source>
<translation>全是(&A)</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="669"/>
<source>&No</source>
<translation>否(&N)</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="671"/>
<source>N&o to All</source>
<translation>全否(&O)</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="673"/>
<source>Abort</source>
<translation>中止</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="675"/>
<source>Retry</source>
<translation>重试</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="677"/>
<source>Ignore</source>
<translation>忽略</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="679"/>
<source>Close</source>
<translation>关闭</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="681"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="683"/>
<source>Discard</source>
<translation>丢弃</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="685"/>
<source>Help</source>
<translation>帮助</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="687"/>
<source>Apply</source>
<translation>应用</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="689"/>
<source>Reset</source>
<translation>重置</translation>
</message>
<message>
<location filename="../src/gui/kernel/qplatformtheme.cpp" line="691"/>
<source>Restore Defaults</source>
<translation>还原默认值</translation>
</message>
</context>
6. 最后一步了,生成qt_zh_CN.qm文件,在Qt Command Prompt中,切换到QTDIR目录,执行下面命令,即可生成新的qt_zh_CN.qm文件:
lrelease ../src/qttranslations/translations/qt_zh_CN.ts -qm translations/qt_zh_CN.qm
这样,qt_zh_CN.qm生成好了,那在Qt程序中将这个qt_zh_CN.qm文件加载入翻译就可以了。