简洁精炼:Qt C++国际化多语言动态切换
我在Qt C++编程需要实现多语言切换,在网上找了需要资料、看了很多视频,都不是很精炼,浪费了大量时间。所以,想试着制作一个讲解Qt C++实现多语言切换的精炼视频,如果本视频对大家有所用处,请大家点赞关注转发。
本视频尽量简短高效,估计用10、20分钟(实际用了30多分钟),引导大家利用一个简单例子讲清楚 Qt C++ 实现多语言动态切换的基本知识和实际操作方法,并向大家提供讲解的文档和程序源代码。
源代码和文档: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、重新编译运行代码,便能够实现中英文切换
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 开源的 DeepSeek-R1「GitHub 热点速览」
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
2019-02-07 Vnc自动登录器(VncManager)v1.3-多国语言绿色版-Release1-20190215