Qt多语言/多语种详细开发教程

news2024/11/13 10:03:00

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。
今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语等。
开发环境(其实多语种这块根环境没太大关系):win10,Qt.5.12.10
下文例子已经上传Qt语言家实现多语言切换
一.先用QtCreator创建一个简单的桌面程序
1.工程就随便命名“LanguageTest”,其他默认。
2.在设计师界面,移除掉菜单栏和状态栏等乱七八糟的,编译一下,确保初始的工程正常。
初始的程序
3.现在我添加两个QLabel标签label1,和label2用于显示文字,两个按钮bt_CN和bt_EN用于语言切换。
在这里插入图片描述
4.工程文件.pro添加语言配置

#语言包,ts语言文件放置在工程目录下的“translate”文件夹中
TRANSLATIONS += \
    translate/LanguageTest_cn.ts \
    translate/LanguageTest_en.ts

在这里插入图片描述

4.使用Qt语言家生成ts语言文件
在QtCreator的菜单栏中,点击 “工具”->“外部”->“Qt语言家”->“更新翻译”,会在“translate”文件夹中生成中文和英语的的两个ts,文件。
在这里插入图片描述
在这里插入图片描述
5.使用Qt的Linguist工具来编辑语言库
根据你程序以后运行的环境(下图中可以看到Linguist工具有好几个,32位的,64位的,MSVC的,MinGW的),选择对应环境的Linguist工具打开。
在这里插入图片描述
打开语言家工具后,点击“文件”->“打开”,找到测试程序工程目录下的“translate”文件夹,将两个ts文件都选中。

加载两个ts文件
出现弹框,选择好源语言和目标语言
选择ts语言对应实际的语种

6.编辑多语言
在Qt语言家中,按照翻译给你的文档,将对应的源文本翻译成各个语种。
在这里插入图片描述
完成后点击“文件”->“保存全部”->“发布全部”,会发现在“translate”文件夹中又生成了两个qm文件。qm文件就是后续程序发布时要附带的真正的语言包文件。
7.程序中加载qm语言包
(1).工程的main.cpp中自己顶一个函数添加语言的加载

#include "mainwindow.h"

#include <QApplication>

#include <QTranslator>
#include <QFileInfo>

bool loadLanguageTranslator(QTranslator *trans)
{
    QString strLanguageValue;
    int nLanguage = 0;
    bool ret;
    QString strLanguagePath;
    switch (nLanguage) {
    case 0:
    default:
        // chinese
        strLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_cn.qm";
        break;
    case 1:
        // English
        strLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_en.qm";
        break;
    }
    ret = trans->load(strLanguagePath);
    if (ret)
    {
        qApp->installTranslator(trans);
        return true;
    }
    else
    {
        //出错
        return false;
    }
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    //载入语言包
    QTranslator trans;
    bool ret = loadLanguageTranslator(&trans);
    if (!ret)
    {
        //出错
    }
    w.show();
    return a.exec();
}

你可以将"nLanguage "卸载配置文件中读取,这样你程序开启时,设置的"nLanguage "如果是0,就会自动显示为中文,如果是1就会自动显示为英文。
(2),在程序中添加即时切换
上面的代码智能在程序开启的时候转换语言,现在对两个按钮bt_CN和bt_EN操作,用于语言切换功能让程序再不关闭的情况下随时切换语言便显示切换效果。
这就需要修改上面的代码,需要先给各个窗体页面加上语言切换事件;再在“MainWindow”中添加设置语言转换函数,再通过按钮进行切换加载,详细看代码:

//MainWindow.h头文件添加
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTranslator>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void setTranslator(QTranslator *trans);

    void onLanguageTrans(int index);

protected:
    //刷新语言
    void changeEvent(QEvent *event);


private slots:
    void on_bt_CN_clicked();

    void on_bt_EN_clicked();

private:
    Ui::MainWindow *ui;

    //语言包
    QTranslator *m_pTranslator = nullptr;

};
#endif // MAINWINDOW_H


//源文件添加
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTranslator>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::setTranslator(QTranslator *trans)
{
    m_pTranslator = trans;
}

//刷新语言
void MainWindow::changeEvent(QEvent *event)
{
    switch (event->type()) {
    case QEvent::LanguageChange:
    {
        ui->retranslateUi(this);
        break;
    }
    default:
        QWidget::changeEvent(event);
    }
}

void MainWindow::on_bt_CN_clicked()
{
    //刷新语言
    onLanguageTrans(0);
    ui->retranslateUi(this);
}

void MainWindow::on_bt_EN_clicked()
{
    //刷新语言
    onLanguageTrans(1);
    ui->retranslateUi(this);
}


void MainWindow::onLanguageTrans(int index)
{

    QTranslator* pTrans = m_pTranslator;

    qApp->removeTranslator(pTrans);

    QString strPath;

    QString strLanguagePath;
    switch (index) {
    case 0:
    default:
        // chinese
        strLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_cn.qm";
        break;
    case 1:
        // English
        strLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_en.qm";
        break;
    }
    int ret = pTrans->load(strLanguagePath);
    if (ret)
    {
        qApp->installTranslator(pTrans);
        setTranslator(pTrans);
    }
    else
    {
        //出错
    }
}


这样修改好之后,编译完成。再将“translate”文件夹及其内部生成的两个qm文件,拷贝到程序的生成目录。
通过按钮切换,及事件响应,就会即时变换语种。

点击切换到中文
点击切换到英文
8.代码中的文字切换
如果遇到代码中要翻译的语种怎么办?
使用tr()将文字包裹起来,在语言家中就会自动被识别出来
在这里插入图片描述
至此,多语种转换完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python知识宝库】使用Python进行网络请求:requests库入门

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、requests库简介二、安装requests库三、发送GET请求四、发送POST请求五、处理响应内容1. 获取状态码2. 获取文…

使用 Python Guardrails 提高 LLM 输出的可靠性

利用验证函数防止您的 LLM 输出崩溃 合理使用IF可以使您的LLM输出更可靠 虽然在创造力和解决复杂任务方面表现出色&#xff0c;但LLM往往难以遵循严格的规则&#xff0c;并且经常提供略微超出设定边界的答案。在构建应用程序时&#xff0c;这一缺陷可能导致失败和荒谬的答案&a…

智能巡检机器人助力新型信息基础设施建设与发展

为深入贯彻落实党的二十大和二十届二中、三中全会精神&#xff0c;推动新型信息基础设施协调发展&#xff0c;近日&#xff0c;工业和信息化部等十一部门关于推动新型信息基础设施协调发展有关事项。 新型信息基础设施是以信息网络为基础&#xff0c;以新一代信息通信技术创新为…

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时&#xff0c;您应该注意以下几个关键点&#xff1a; 平衡精度 平衡精度是衡量平衡机性能的核心指标&#xff0c;直接影响到不平衡量的检测与校准的准确性&#xff0c;从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声&#xff0c;提高磨…

大数据-126 - Flink State 03篇 状态原理和原理剖析:状态存储 Part1

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来&#xff0c;一站式有声阅读平台听书系统 &#x1f31f; 开篇&#xff1a;遇见未来&#xff0c;从“智听”开始 在这个快节奏的时代&#xff0c;你是否渴望在忙碌的间隙&#xff0c;找到一片属于自己的宁静角落&#xff1f;是否梦想着能随时随地&#xff0c;沉浸在知…

海外盲盒系统开发搭建,助力盲盒出海!

随着盲盒全球化发展&#xff0c;盲盒出口海外已经成为了大多数盲盒企业的选择。在互联网时代中&#xff0c;盲盒出口主要通过跨境电商和独立海外盲盒系统。而在目前市场发展趋势中&#xff0c;对于企业来说&#xff0c;一个独立的盲盒系统至关重要。海外盲盒APP可以帮助盲盒企业…

【ACM出版-高录用EI稳检索!九大高校联合举办】2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI2024)

​【ACM出版&#xff0c;EI稳定检索&#xff0c;九大高校联合举办, IEEE Fellow支持】 2024年人工智能、数字媒体技术与交互设计国际学术会议&#xff08;ICADI2024&#xff09; 2024 International Conference on artificial intelligence, digital media technology and …

期权开户攻略:期权开户主要的流程是什么?

今天期权懂带你了解期权开户攻略&#xff1a;期权开户主要的流程是什么&#xff1f;交易期权可以为投资者提供多种灵活性和机会&#xff0c;但同时也伴随风险。因此&#xff0c;了解期权的基本概念和策略&#xff0c;结合自身的风险承受能力&#xff0c;才能更好地进行投资决策…

解决el-date-picker切换类型type时错位

vue代码如下 样式效果如下 切换日期类型时&#xff0c;立马点日期会出现错位&#xff0c;检查发现是日期的展开面板并没有插入到body中导致的错位 解决方法 给el-date-picker加上唯一key值就可以

智慧园区,为园区多场景提供智能化赋能

智慧园区解决方案旨在通过现代信息技术手段&#xff0c;为园区空间多场景提供智能化赋能&#xff0c;以提升园区的运营效率、管理水平和服务质量。以下是对智慧园区解决方案的详细阐述&#xff1a; 一、智慧园区解决方案的核心目标 智慧园区解决方案的核心目标是实现园区的“…

ruoyi若伊项目(vue前后端分离)下载搭建

介绍 &#x1f4a1; RuoYi-Vue ​ RuoYi-Vue 是一款开源的后台管理系统&#xff0c;是一个 Java EE 企业级快速开发平台&#xff0c;基于经典技术组合&#xff08;Spring Boot、Spring Security、MyBatis、Jwt、Vue&#xff09;&#xff0c;内置模块如&#xff1a;部门管理、…

Gemma 2大模型的训练范式解析

咱们聊聊大型语言模型&#xff08;LLMs&#xff09;的训练范式吧&#xff0c;这可是个大话题。从最早的GPT模型到现在的复杂开放权重LLMs&#xff0c;这一路走来&#xff0c;变化可真不少。记得最开始&#xff0c;LLMs的训练就只关注预训练&#xff0c;但现在&#xff0c;这事儿…

C++设计模式——Strategy策略模式

一&#xff0c;策略模式简介 策略模式是一种行为型设计模式&#xff0c;策略模式在软件开发场景中定义了一系列的算法&#xff0c;并将每个算法单独封装在可替换的对象中&#xff0c;使应用程序在运行时可以根据具体的上下文来动态地选择和切换算法&#xff0c;同时保持原有的…

【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(2)

关于java应用的监控本系列有文章如下&#xff1a; 【运维监控】influxdb 2.0telegraf 监控tomcat 8.5运行情况 【运维监控】influxdb 2.0grafana 监控java 虚拟机以及方法耗时情况 【运维监控】Prometheusgrafana监控tomcat运行情况 【运维监控】Prometheusgrafana监控spring b…

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息&#xff0c;然后展示在页面上。 效果展示 首次发送需要…

【java入门】八大基本数据类型与变量的声明与使用,超详细讲解!

&#x1f680; 个人简介&#xff1a;某大型国企资深软件开发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

【PyCharm使用教程】PyCharm的基本使用教程,适合完全零基础,小白快速上手!(Python+PyCharm安装包)

如果你正在学习Python&#xff0c;但是找不到方向的话可以试试我这一份学习方法和籽料呀&#xff01;点击 [领取籽料]&#xff08;不要米米&#xff09; Pycharm的基本使用教程 【一】PIP换源 ①问题描述 在使用Python时需要经常用到pip安装第三方包。在某些情况下由于网络速…

基于C++实现(控制台)学生成绩管理系统

学生成绩管理系统 一、系统需求分析 一个巨大的学校有数以万计的教工、学生和相应的资料需要管理。一个好的学生成绩管理系统可以协助管理员管理巨大的数据库&#xff0c;允许管理员、教师跟学生这三种用户登录进行相应的操作。 管理员具有管理数据库的一切权限。管理员负责…

兔英语语法体系——观后笔记

目录 一、视频链接 二、视频前言 三、简单句(Simple Sentences) 1. 可独立完成的动作 2. 有1个动作的承受者 3. 有两个动作承受者 4. 只有一个动作承受者(但需补充) 5. 非 “动作” 6. 总结 四、五大基本句型 五、句子成分 6. 定语 7. 状语 8. 同位语 9. 总结 …