QML 中实现国际化翻译

本文详细介绍了在Qt中实现国际化翻译的步骤,包括使用qsTr标记文本、在.pro文件中设置ts文件路径、使用lupdate生成ts文件、linguist编辑ts文件、lrelease生成qm文件以及在程序中动态切换语言的过程。
摘要由CSDN通过智能技术生成

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

简介

Qt 中提供了多种将字符串标记为可翻译的方法,我们将之称为国际化翻译。在帮助文档中搜索 installTranslatorFunctions就可以看到下图所示的这些函数:

在这里插入图片描述
在 QML 中最常用的就是 qsTr(),例如:
Text { text: qsTr("Hello") }

使用流程

1. 使用 qsTr 标识需要翻译的内容

在程序中把需要动态显示文本信息的地方使用 qsTr(“sourceText”),如果没有合适的翻译字符串可用,则返回 QString::fromUtf8(sourceText)

2. pro 文件中添加路径

这里可能会有点误导,因为 pro 文件中添加路径一般都是已经存在的文件,而 TRANSLATIONS 添加的路径是等等会生成 ts 文件的路径,文件名和路径按照自己情况修改

TRANSLATIONS += \
    ../config/language/language_zh_CN.ts \
    ../config/language/language_en_US.ts
3. 使用 Qt 语言家中的 lupdate 生成 ts 文件

调用 lupdate工具会自动扫描项目并生成 pro 中设置的 ts 文件,ts 文件是 xml 格式的,是未经过翻译的,需要人为的去配置文本内容
在这里插入图片描述

4. 使用 linguist 工具编辑 ts 文件

使用 Qt 语言家工具打开刚才生成的 ts 文件,可以多个文件同时进行配置,效率更高

在这里插入图片描述
在这里插入图片描述

5. 使用 Qt 语言家中的 lrelease 生成 qm 文件

ts 文件配置完成后,可以使用 lrelease 生成 qm 文件。qm 文件就是把 xml 压缩成了二进制,在切换语言时,使用 QTranslater 加载不同的 qm 文件
在这里插入图片描述
在这里插入图片描述

6. 在程序中切换语言,加载 qm 文件

qm 文件的路径一定要正确,否则界面上就只显示 souceText 的内容,不会翻译成 ts 中的内容
另外,retranslate() 函数是 Qt 5.10 版本才有的接口。在 Qt 5.10 以前的版本中是不能直接动态切换语言的,只能重新启动程序才生效,或者一个一个的更新文本信息

#include <QObject>
#include <QTranslator>
#include <QQmlApplicationEngine>

class TranslateCtrl : public QObject
{
    Q_OBJECT

public:
    explicit TranslateCtrl(QQmlEngine *engine, QObject *parent = nullptr);

    // 加载语言 1-中文 2-英文
    Q_INVOKABLE void loadLanguage(int type);

private:
    QQmlEngine *m_engine = nullptr;
    QTranslator *m_translator = nullptr;
};
#include "translatectrl.h"
#include <QCoreApplication>

TranslateCtrl::TranslateCtrl(QQmlEngine *engine, QObject *parent) : QObject{parent}
{
    m_engine = engine;
    m_translator = new QTranslator(this);
    QCoreApplication::installTranslator(m_translator);
}

void TranslateCtrl::loadLanguage(int type)
{
    switch (type)
    {
    case 1: m_translator->load("config/language/language_zh_CN.qm"); break;
    case 2: m_translator->load("config/language/language_en_US.qm"); break;
    default: break;
    }

    m_engine->retranslate();
}
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值