文章目录

  • 前言
  • 1. 生成ts文件
    • 1.1 在pro文件中添加
    • 1.2 语言文字在程序中说明
    • 1.3 生成ts文件
    • 1.4 修改ts文件
  • 2 生成qm文件
  • 3 加载qm语言包

前言

为了支持国际化最关键的地方是制作多国语言包,然后再实现动态切换。QT里面既可以采用命令行也可以采用Qt Creator的界面操作来生成,这里我们利用Qt Creator来生成多国语言包。
基本流程是

  1. 生成ts文件;
  2. 生成qm文件;
  3. 最后通过QTranslator类来加载qm文件,实现多语言包的切换。

注意:为了更全面地实现多语言包,在程序中所有涉及到界面中的按钮或者菜单中的文字显示,都必须使用 QObject::tr("…") 的方式将显示的内容包裹起来,这样做的原因是:只有添加了QObject::tr()的标记,生成ts文件的时候程序才会认为被QObject::tr()包裹的地方是需要制作多语言的,从而在ts中预留出位置。

1. 生成ts文件

1.1 在pro文件中添加

TRANSLATIONS = languages/lang_English.ts \languages/lang_Chinese.ts

在pro文件中,加入说明,其中“lang_English.ts”与“llang_Chinses.ts”为设置语言文件的名称,这里使用中文与英语两种语言,当你需要其他更多的语言时,添加多个语言文档即可。
注:languages文件夹需事先创建。

1.2 语言文字在程序中说明

为了Qt识别你在程序中需要语言准换的文字,需要将需要转换的文字使用QObject::tr(“…”) 进行标记,否则程序中并不能对其进行识别。例如:

qDebug()<<tr("Output Info: ")<<tr("Language - English");

而在ui窗口直接进行添加一些插件中的语言,一般默认可以识别进行翻译的。如果我们想将其关掉,可以选择插件的属性,将toolTip中“可翻译的”直接取消勾选即可。

1.3 生成ts文件

执行【工具】–>【外部】–>【Qt语言家】–>【更新翻译(lupdate)】,如下图所示,执行完成后languages目录下会自动生成lang_English.ts和lang_Chinese.ts文件。

1.4 修改ts文件

利用Qt中自带的Linguist打开刚刚生成的st文件,根据相应的语言,进行语言转换。
lang_Chinese.ts
lang_English.ts

2 生成qm文件

ts文件翻译结束以后,点击保存,然后在Qt Creator中,使用:工具->外部->Qt预言家->部署翻译(lrelease),就会生成需要的qm文件。

3 加载qm语言包

将生成的qm文件复制到发布版本中相应的位置,然后在程序中加载

void MainWindow::loadLanguage(const QString langflag)
{if(langflag.isEmpty())return;QString langqmfilepath;if(langflag.compare("en") == 0){langqmfilepath = qApp->applicationDirPath() + QString("/languages/lang_English.qm");}else if(langflag.compare("zh") == 0){langqmfilepath = qApp->applicationDirPath() + QString("/languages/lang_Chinese.qm");}if(QFile(langqmfilepath).exists()){m_translator->load(langqmfilepath);qApp->installTranslator(m_translator);}elseqDebug()<<"[houqd] authclient language file does not exists ...";//重新刷新界面ui->retranslateUi(this);}

其中,m_translator即为QTranslator实例,在类的构造函数中赋值:m_translator = new QTranslator;实现过程很简单,就是取得语言包的绝对路径,然后利用QTranslator来加载它,再利用qApp->installTranslator(m_translator)来安装,最后还应该将显示界面重新显示一次进行更新。
主界面可以直接借助ui->retranslateUi(this)进行重新设置界面显示,但是这个只能更新当前页面,其余浮动页面并不能直接显示出来。需要按照以下格式将每一个需要显示的页面添加相应的程序。
示例
myDialog.h

void changeEvent(QEvent *event);

myDialog.cpp

void myDialog::changeEvent(QEvent *event)
{QDialog::changeEvent(event);switch (event->type()){case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}
}

示例参见:https://gitee.com/null_712_5588/CSDNBlogDemo/tree/master/QtLanguageSwitchTest

Qt实现多语言切换 - Qt语言家相关推荐

  1. Qt多语言切换-Qt语言家

    csdn文章地址 github网址 1. 前言 本文利用Qt语言大师工具,实现Qt程序的多国家语言切换,在github上放置的开源代码中同时放置了所使用的 Qt语言大师程序.CSDN上有众多的Qt语言 ...

  2. java国际化转换_java 实现国际化 中英文语言切换

    [实例简介] java实现国际化中英文语言切换 java语言切换JSP国际化 [实例截图] [核心代码] JAVA国际化实现 └── struts01 ├── src │   ├── com │   ...

  3. 【大话QT之十四】QT实现多语言切换

    功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言 ...

  4. Qt之Qml 国际化—实现简易语言切换功能

    目标:实现一个下拉框,具有切换语言的功能 GIF展示: 版本Qt5.14.2,版本不能低于5.10 qml控件 1.在QML文件中把需要翻译显示的文本用qsTr(" ")包裹起来 ...

  5. 2.4 Qt多国语言切换

     如果要实现qt程序动态语言切换,最简单有效的方法是使用QTranslator类,首先使用QTranslator对象加载相应的翻译语言文件,然后用 QApplication::installTrans ...

  6. Qt+C++窗体界面中英文多语言切换

     程序示例精选 Qt+C++窗体界面中英文语言切换 如需安装运行环境或远程调试,见文章底部个人微信名片,由专业技术人员远程协助! 前言 这篇博客针对<<Qt+C++窗体界面中英文语言切换& ...

  7. Qt / Qml 中支持多国语言

    [缘起] 最近找到一个看起来比较好用的开源工具( 然鹅不太会用 ),但整个界面都是英文的. 不过由于是 Qt 写的,所以就尝试自己做些汉化. 然后了解到不少实现多国语言相关的技术( 以及一些坑 (‾◡ ...

  8. 使用Go语言开发Qt界面

    Go 的 UI 库 Go 语言本身是没有 UI 库的,不过有许多第三方的库支持将 Go 语言绑定到其他 UI 库,比如 Qt.GTK.参考地址 环境搭建 非 windows 或者需要参数说明的可以参考 ...

  9. qt编译c语言dll,QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)

    最近这阵子,接了个私活,封装一个开发包俗称的SDK给客户调用,查阅了不少人家的SDK,绝大部分用VC编写,并且VC6.0居多,估计也是为了兼容大量的XP用户及IE浏览器,XP自带了VC6.0运行库,因 ...

  10. PySide是Python语言的Qt框架的一个绑定。PySide支持跨平台和本地GUI应用程序开发,是在Python 2.6、2.7和3.x版本下可用。

    PySide是Python语言的Qt框架的一个绑定.PySide支持跨平台和本地GUI应用程序开发,是在Python 2.6.2.7和3.x版本下可用. 在开始使用PySide之前,需要在你的机器上安 ...

最新文章

  1. c语言编程 构建围墙,c语言程序设计朝盛 综合程序练习题.ppt
  2. kibana安装步骤
  3. linux python软连接_Linux软链接的创建,删除,修改
  4. 周期三角波傅里叶级数例题_傅里叶详解之傅里叶级数
  5. jedis java.lang.verifyerror_需要使用jfinal中的JedisPlugin的一些问题
  6. 第二章 C++对C的改进和扩展
  7. 适配器模式之迭代器模式
  8. linux scp命令 将数据从一台linux服务器复制到另一台linux服务器
  9. 《python黑帽子 黑客与渗透测试编程之道》第二章-网络基础 tcp、udp客户端、服务端
  10. 【养眼美女win7主题】主题世界
  11. 计算机外设解决方案,瑞昱在2007 IDF上展出多款计算机外设产品解决方案
  12. python语言的多行注释以什么开头_python实现多行注释的方法
  13. Arduino串口通信
  14. APP国际化、动态设置控件颜色(APP个性化)
  15. 笔记本电脑坏了,昨天拿到鼎好去修。
  16. 高德地图上画图!和3D绘制区域
  17. 什么是指用计算机,mips是指计算机的什么(mips指标的含义是什么)
  18. 判断一个数是否为两个素数的乘积
  19. 如何使用计算机备用内存,怎样解决emwin7/em备用存储空间占用高-win7 内存占用高,电脑物理内存占用90...
  20. 前端基础入门之css定位 position

热门文章

  1. dstat 命令详解
  2. 118_网络编程_对IP、网络ID、主机ID、子网掩码、点分十进制的理解
  3. 病毒分析四:steam盗号病毒
  4. java kafka面试题_八年面试生涯,整理了一套Kafka面试题
  5. 计算机基础 软件系统与硬件系统
  6. python全栈马哥_马哥2018python全栈+爬虫+高端自动化,资源教程下载
  7. 使用NSSM配置守护进程 Nginx(Windows)
  8. pscc2019滤镜抽出_「PS-CC2019新版教程」魔棒工具,让你一秒钟完成抠图-基础篇
  9. 体验 | 5 个技巧让你的电视盒子物尽其用
  10. ubuntu wps安装