前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt多语言翻译示例

Qt多语言翻译示例

作者头像
Qt君
发布2019-07-15 15:32:32
1.9K0
发布2019-07-15 15:32:32
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

一个基础的翻译示例和一些注意事项


示例目录

代码语言:javascript
复制
QtTranslation/
├── Languages
│   ├── en.qm
│   ├── en.ts
│   ├── Languages.qrc
│   ├── zh_CN.qm
│   └── zh_CN.ts
├── main.cpp
└── QtTranslation.pro

注意事项

  • 将翻译文件(ts后缀)生成的qm后缀文件用资源文件( Languages.qrc)包括以供程序引用;
  • translator.load(":/zh_CN.qm")需要以":/"为前缀引用,不能使用"qrc:/"为前缀引用,否则load返回错误;
  • 使用 QObject::tr翻译原因是该翻译的上下文为QObject对应ts文件的是 <name>QObject</name>的值;
  • 翻译上下文使用不正确,明明是加载成功的语言文件就是翻译不成功,很多是因为这个上下文导致;
  • 可使用 QCoreApplication::translate接口指定上下文,如用 QCoreApplication::translate("QObject","start")指定"QObject"上下文标识。

main.cpp

代码语言:javascript
复制
#include <QCoreApplication>
#include <QTranslator>

#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTranslator translator;
    if (! translator.load(":/zh_CN.qm")) {
        qDebug()<<"Failed to load translation file!";
    }
    qApp->installTranslator(&translator);

    qDebug()<<QObject::tr("start")<<QObject::tr("end");
    qDebug()<<QObject::tr("open")<<QObject::tr("close");

    qApp->removeTranslator(&translator);
    if (! translator.load(":/en.qm")) {
        qDebug()<<"Failed to load translation file!";
    }

    /* Switch language */
    qApp->installTranslator(&translator);

    qDebug()<<QObject::tr("start")<<QObject::tr("end");
    qDebug()<<QObject::tr("open")<<QObject::tr("close");

    return 0;
}

QtTranslation.pro 项目文件

代码语言:javascript
复制
QT += core
QT -= gui

CONFIG += c++11

TARGET = QtTranslation
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

RESOURCES += \
    Languages/languages.qrc

TRANSLATIONS += \
    Languages/en.ts \
    Languages/zh_CN.ts

zh_CN.ts 中文翻译文件

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="zh_CN">
<context>
    <name>QObject</name>
    <message>
        <source>start</source>
        <translation>开始</translation>
    </message>
    <message>
        <source>end</source>
        <translation>结束</translation>
    </message>
    <message>
        <source>open</source>
        <translation>打开</translation>
    </message>
    <message>
        <source>close</source>
        <translation>关闭</translation>
    </message>
</context>
</TS>

en.ts 英文翻译文件

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="en">
<context>
    <name>QObject</name>
    <message>
        <source>start</source>
        <translation>Start</translation>
    </message>
    <message>
        <source>end</source>
        <translation>End</translation>
    </message>
    <message>
        <source>open</source>
        <translation>Open</translation>
    </message>
    <message>
        <source>close</source>
        <translation>Close</translation>
    </message>
</context>
</TS>

Languages.pri 文件

代码语言:javascript
复制
<RCC>
    <qresource prefix="/">
        <file>en.qm</file>
        <file>zh_CN.qm</file>
    </qresource>
</RCC>

程序输出

代码语言:javascript
复制
"开始" "结束"
"打开" "关闭"
"Start" "End"
"Open" "Close"

示例地址 https://github.com/aeagean/QtTranslation.git

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档