• 7281阅读
  • 2回复

[共享]Qt 5.3.1 & Qt 5.5.1中带QMessageBox及QDialogButtonBox按钮翻译的qt_zh_CN.qm [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2016-05-12
— 本帖被 XChinux 执行加亮操作(2016-05-22) —
自从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文件加载入翻译就可以了。
附件: qt_zh_CN_5.3.1.zip (39 K) 下载次数:28
附件: qt_zh_CN_5.5.1.zip (39 K) 下载次数:64
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ded231

只看该作者 1楼 发表于: 2016-05-13
赞一个!
离线闲来误事

只看该作者 2楼 发表于: 2016-07-18
Re:Qt 5.3.1 & Qt 5.5.1中带QMessageBox及QDialogButtonBox按钮翻译
赞一个
正在学习多语言翻译,各种对话框,都搞不清楚修改哪里统一切换语言了
夜色凉如水,星光似水柔
快速回复
限100 字节
 
上一个 下一个