我在Qt C++编程需要实现多语言切换,在网上找了需要资料、看了很多视频,都不是很精炼,浪费了大量时间。所以,想试着制作一个讲解Qt C++实现多语言切换的精炼视频,如果本视频对大家有所用处,请大家点赞关注转发。

本视频尽量简短高效,估计用10、20分钟(实际用了30多分钟),引导大家利用一个简单例子讲清楚 Qt C++ 实现多语言动态切换的基本知识和实际操作方法,并向大家提供讲解的文档和程序源代码。请用户注意: 在gitee.com创建项目时,它自作主张将LangTest03改为lang-test03,所以从 https://gitee.com/patton88/lang-test03.git 下载克隆的项目目录为lang-test03,用户必须将其改为langtest03,项目才能正常编译运行。
        源代码和文档:https://gitee.com/patton88/lang-test03
        比站视频:https://www.bilibili.com/video/BV1ytNNeoEYs/?spm_id_from=333.337.search-card.all.click&vd_source=7c7ae5cc1dbb2453e1eb43950a4264a3
        抖音视频:https://www.douyin.com/user/self?from_tab_name=main&modal_id=7468875295454448950
        博客地址:https://www.cnblogs.com/ybmj/p/18703494
        这里将采用 Qt C++ 内置提供的多语言动态切换解决方案,这种方式的突出优点是无需重启程序便能动态切换界面语言。

1、编程环境。这里主要用到:
(1)QT 5.x C++ 环境
(2)Qt Creator 编程环境
(3)Qt 语言处理工具,后面将陆续用到:
lupdate(Language Update)用于从 *.ui、*.h、*.cpp 等源代码中提取需要翻译的字符串,并生成.ts文件。
lrelease(Language Release)用于将 .ts 文件编译成二进制格式的 .qm 文件,供 Qt 应用程序使用。
linguist(语言处理专家)则是处理语言的图形界面,用于翻译和编辑 .ts 文件。 ˈlɪŋɡwɪst

可选:Total Commander 高效文件管理工具

2、创建 QT5 Dialog 项目 LangTest03
(1)在 Qt Creator 创建 QT5 Dialog 项目 LangTest03
(2)调整 Dialog 界面

3、利用 lupdate(Language Update)工具生成 .ts 文件
.ts (Translation Source file)是XML格式的翻译源文件。
Windows中路径分隔符用反斜杠(\),Unix和Linux系统路径分隔符用斜杠(/),左反右正
(1)关键:必须在 e:\QTcode02\LangTest03\LangTest03.pro 文件中添加生成指定语言 .ts 文件的代码,下面代码中包含 TRANSLATIONS = 及下面的两行代码,含义是生成 LogDlg_EN.ts、LogDlg_CN.ts 两个 .ts 语言代码文件。若需要生成更多的其他语言文件,只需在此逐项添加即可。

QT += core gui

TRANSLATIONS = LangTest03_en_US.ts \
LangTest03_zh_CN.ts

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17
...

(2)若没有添加上面两行代码,生成 .ts 文件时会失败:
Starting external tool "C:\Qt\5.15.2\mingw81_64\bin\lupdate.exe E:/QTcode02/LangTest03/LangTest03.pro"
Info: creating stash file E:\QTcode02\LangTest03\.qmake.stash
lupdate warning: no TS files specified. Only diagnostics will be produced for 'E:/QTcode02/LangTest03/LangTest03.pro'.
"C:\Qt\5.15.2\mingw81_64\bin\lupdate.exe" finished

(3)做好以上准备工作后,可以在 Qt Creator 中打开菜单“工具 > 外部 > Linguist > Update Translations (lupdate)”,便会根据在 LangTest03.pro 文件中添加的代码,成功生成 LogDlg_EN.ts、LogDlg_CN.ts 两个 .ts 语言代码文件。显示信息如下:
Starting external tool "C:\Qt\5.15.2\mingw81_64\bin\lupdate.exe E:/QTcode02/LangTest03/LangTest03.pro"
Info: creating stash file E:\QTcode02\LangTest03\.qmake.stash
Updating 'LangTest03_en_US.ts'...
Found 8 source text(s) (8 new and 0 already existing)
Updating 'LangTest03_zh_CN.ts'...
Found 8 source text(s) (8 new and 0 already existing)
"C:\Qt\5.15.2\mingw81_64\bin\lupdate.exe" finished

(4)当然,也可以打开CMD窗口直接运行下面命令,也可以根据 LangTest03.pro 文件中 TRANSLATIONS 字段指定的语言,成功生成相应语言的 .ts 文件,结果与在 Qt Creator 中使用菜单命令生成一样。
"C:\Qt\5.15.2\mingw81_64\bin\lupdate.exe E:/QTcode/LangTest03/LangTest03.pro"

4、利用 lrelease(Language Release)将 .ts 文件翻译成指定语言的 .qm 文件
.qm 文件是 Qt message Qt 信息文件
(1)可选:启动对应版本的 linguist.exe(语言处理专家) 程序,比如:C:\Qt\5.15.2\mingw81_64\bin\linguist.exe
(2)点击工具栏的“打开”按钮(或者点击菜单“文件 > 打开”),选择打开 e:\QTcode02\LangTest03\LangTest03_en_US.ts
(3)打开之后,可能对话框很小,只需用鼠标将对话框拖大到合适大小即可
(4)将对话框中的需要翻译的文本信息,逐一翻译为对应语言
(5)翻译完成后,点击菜单“文件 > 发布”,即可编译到 e:\QTcode02\LangTest03\LangTest03_en_US.qm
(6)然后,点击菜单“文件 > 关闭”,提示是否保存修改时点击“是”保存翻译结果,并关闭打开的 .ts 文件
(7)如法炮制,打开 e:\QTcode02\LangTest03\LangTest03_zh_CN.ts,翻译并编译为 LangTest03_zh_CN.qm
(8)当然,如果你很熟悉了,也可以打开CMD窗口运行下面命令,将 .ts 文件翻译成指定语言的 .qm 文件
"C:\Qt\5.15.2\mingw81_64\bin\lrelease.exe" "E:/QTcode02/LangTest03/LangTest03_en_US.ts" -qm "E:/QTcode02/LangTest03/LangTest03_en_US.qm"
"C:\Qt\5.15.2\mingw81_64\bin\lrelease.exe" "E:/QTcode02/LangTest03/LangTest03_zh_CN.ts" -qm "E:/QTcode02/LangTest03/LangTest03_zh_CN.qm"

5、在项目中添加 加载 qm 文件、安装翻译器 qTranslator、翻译后刷新界面的代码
(1)将上面翻译的 LangTest03_en_US.qm、LangTest03_zh_CN.qm 文件拷贝到项目 LangTest03 的构建目录,比如:
e:\QTcode02\LangTest03\build\Desktop_Qt_5_15_2_MinGW_64_bit_for_Qt_Creator_14_x-Debug\
可以在 Qt Creator 中打开 LangTest03 项目后,点击左侧工具栏的“项目”,在右侧的“概要”下面便可以找到“构建目录”
(2)在 e:\QTcode02\LangTest03\dialog.h 中添加“中文”、“英文”两个按钮的响应函数,添加 qTranslator 成员变量。
private slots:
void on_btnChinese_clicked();
void on_btnEnglish_clicked();

private:
QTranslator *qTranslator = nullptr;

(3)在 e:\QTcode02\LangTest03\dialog.cpp 中实现“中文”、“英文”两个按钮的响应函数,添加语言切换和翻译刷新代码
if (nullptr == qTranslator) {
qTranslator = new QTranslator(this);
}
qTranslator->load("LangTest03_en_US.qm");
qApp->installTranslator(qTranslator);
ui->retranslateUi(this);

6、重新编译运行代码,便能够实现中英文切换

简洁精炼:Qt C++国际化多语言动态切换的更多相关文章

  1. c#: 界面多语言动态切换简单实现

    终于有空整理下多语言实现思路.查阅已有方案,有用不同resx文件的,有每个控件动态设置的,有用反射去整的,颇为繁琐. 结合项目中实现方法,并做简化,实现通用的多语言切换方案,以做备忘. 它支持语言自定 ...

  2. Qt 国际化之二:多国语界面动态切换的实现

    第一步在你的pro里面加入 TRANSLATIONS = myexec_zh.ts (根据对应的ts文件修改)第二步用lupdate 操作pro 将要翻译的提取到ts文件 命令是 lupdate my ...

  3. Qt之国际化

    简介 Qt国际化属于Qt高级中的一部分,本想着放到后面来说,上节刚好介绍了Qt Linguist,趁热打铁就一起了解下. 对于绝大多数的应用程序,在刚启动时,需要加载默认的语言(或最后一次设置的语言) ...

  4. Rmarkdown用法与R语言动态报告

    Rmarkdown用法与R语言动态报告数据分析用R语言非常便捷,因为R语言的社区强大,并且在不断更新和完善,提供了各种分析利器.Knitr和Rmarkdown包则是数据分析中的动态报告利器. 下面是一 ...

  5. WPF 实际国际化多语言界面

    前段时候写了一个WPF多语言界面处理,个人感觉还行,分享给大家.使用合并字典,静态绑定,动态绑定.样式等东西 效果图 定义一个实体类LanguageModel,实际INotifyPropertyCha ...

  6. iOS 国际化多语言设置 xcode7

    iOS 国际化多语言设置 方式一: 1. 在storyboard中创建好UI,然后在 project 里面  Localizables 栏目里面,添加你需要的语言:默认是Englist; 比如这里我添 ...

  7. QT皮肤系统的动态切换

    应用需求: 提供皮肤切换选项,在不重启应用程序的情况下实现皮肤的动态切换. 理论基础: 1) 图片资源是如何被利用的 这里先简要说明一下实现原理,皮肤的动态切换其关键在于图片资源的加载方式.QT中每个 ...

  8. Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

    下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...

  9. 更好用的excel国际化多语言导出

    不知道大家在开发中有没有遇到过『excel导出』的需求,反正我最近写了不少这种功能,刚开始利用poi,一行行的手动塞数据,生成excel,而且还有国际化需求,比如:标题栏有一列,用户切换成" ...

  10. QT in VS 多语言实现(中英文切换,每个步骤都有截图,只有UTF8才能让Qt语言家正确读取。先qApp->removeTranslator,然后installTranslator,每个类都要写上槽函数RetranslateUI)

    最近项目需要软件具有中英文双语切换功能,而QT又自带此功能,现将实现方式记录下来. 说到中英文切换,少不了要了解QT的内部编码方式.在此就不详述QT编码方式了,具体可参考 彻底弄懂Qt的编码.只需要记 ...

随机推荐

  1. 前端开发系列127-进阶篇之tagged template

    本文介绍模板字符串的某种特殊用法,允许我们在函数名后跟一个模板字符串,然后可以像正常函数调用一样来把模板字符串中的各个部分以参数的方式传递给该函数. 标签模板-tagged template 并非真正 ...

  2. 支撑 1300 万月活的幕后真相:Figma 是怎么把核心服务搬上 EKS 的?

    本文由 CloudPilot AI 编译,转载请联系marketing@cloudpilot.ai 近日,设计软件新贵 Figma 正式递交 IPO 申请,有望成为 2025 年规模最大的科技上市案. ...

  3. software-center ubuntu处在不稳定的状态,最好重装

    sudo dpkg --remove --force-remove-reinstreq software-center sudo apt-get install software-center 搞得我 ...

  4. C++ 元函数的学习一

    简介 参考书籍 C++模板元编程实战 -- 李伟 感觉这本书很超值,因为 zsvh 知乎大佬都给写题序了 简单code header #include <iostream> // 顺序结构 ...

  5. 解决IDEA总是将lombok注解处理器设置为unknown-lombok.jar

    背景 新建了一个SpringBoot项目,在项目中使用了lombok的注解,编译报错无法运行. 问题 具体表现为编译报错,大概如下图: 其原因是IDEA将lombok的注解处理器设置为了lombok- ...

  6. POLIR-Society-Organization-Politics-Self-Health : Mental{Love:SelfLove自爱+Esteem自强+StopWorrying停止焦虑} + Physical:{ BestState最佳状态+Care保持健康+TimeManagement时间管理}

    0. Self-Love: Mental Health Self-Confidence: 自信 Self-Esteem: 自尊 self-Reliance: 自立 Self-Improvement: ...

  7. tauri学习(6)-系统托盘systemTray

    接上节继续,研究下系统托盘. 一.tauri.conf.json配置启用系统托盘 二.Rust中添加托盘 运行效果: 但是只有一个托盘图标,点了啥反应都没有. 三.给托盘加菜单 效果: 接下来,给托盘 ...

  8. mock测试及jacoco覆盖率

    单元测试是保证项目代码质量的有力武器,但是有些业务场景,依赖的第三方没有测试环境,这时候该怎么做Unit Test呢,总不能直接生产环境硬来吧? 可以借助一些mock测试工具来解决这个难题(比如下面要 ...

  9. [题解] 洛谷 P8479 「GLR-R3」谷雨 题解

    防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防剧透防 ...

  10. 从Mono脚本生成Entity:深入理解Unity DOTS中的Archetype、Chunk与Entity结构设计

    Unity 的 DOTS(Data-Oriented Technology Stack)是面向性能极致优化的一种架构范式,其底层结构设计并非偶然,而是深思熟虑的结果.本篇文章将从开发者最熟悉的入口-- ...