Qt 界面实现多国语言的切换实例

实现QT的多语言切换(静态+动态) 如何更好实现软件的多语言切换功能,便于管理多人的项目共同开发。 阅读详情

Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性。Qt本身提供的linguist工具,就是来实现这个翻译过程的。实现多国语的步骤大体上说来有这么几步:

Qt 界面实现多国语言的切换实例是本文要介绍的内容,一直认为Qt界面相对于还是很好实现的一种开发。多国语界面的实现,在MFC中是很别扭的。以前在作MFC时,实现多国语言的界面,只有把资源文件做成各个语言的资源DLL,在程序启动时,根据选择判断选择载入哪个DLL来获取资源。MFC的资源也是分语言的,在创建资源的时候要选择,但是这样的实现还有有弊端。最根本的原因是MFC的资源文件不是Unicode编码的,而是不同语言的本地码,至少VC6是这样的。这样在中文系统中载入日文的资源,界面出现的是乱码。

Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性。Qt本身提供的linguist工具,就是来实现这个翻译过程的。实现多国语的步骤大体上说来有这么几步:

1、在需要被翻译的字符串前面标识tr,如QString str=tr(“hello,world!”); ,这很重要,因为翻译工具会把源码中tr标识的字符串提取出来,翻译成其他语言,如果没有用tr标识的,不会被工具提取。在界面中输入的文字,默认已经是加上tr的了,所以在翻译时也能看见。建议:在程序中的字符串使用英文,汉语等通过多国语翻译来实现,而不要采取把汉字写在代码中。

2、在工程文件***.pro中,添加一项 TRANSLATIONS +=    ***.ts  ****.ts 扩展名为.ts是翻译的源文件,表示生成这几个文件。一般我们会在命名中把区域加进去,更好的注释这些文件是用于什么语言的,比如中文大多会这样命名 myapp_zh_CN.ts, zh_CN表示的就是中国。

3、使用lupdate工具提取翻译源文件, 命令是这样的  #lupdate ***.pro ,lupdate会解析***.pro即工程文件,生成TRANSLATIONS中的 ***.ts 几个文件,这些文件可以被linguist工具打开,按照提示一个一个的翻译成需要的文件,然后保存就OK,

linguist的使用很简单,一看界面基本就会了。上面提到的这些工具都是Qt自带的。

4、使用lrelease工具发布翻译文件的二进制文件,这样在程序运行时载入会大大的加快速度。使用方式是#lrelease ***.pro,这个工具会提示你多少语句被翻译,多少被忽略了等。生成的文件是 ***.qm,于同名的 ***.ts只是换了一个扩展名。而这才是我们程序需要使用到的文件。

5、使用***.qm文件。关于这个,我想还是摘抄书上的原文来说明一下:

切换语言分为两种情况:

1. 程序载入的时候,根据当前的区域设置,自动选择语言包(.qm),即可;

2. 要求在程序运行过程中动态切换语言,需要
 
第一种情况,一般在main函数中程序启动的部分加入如下代码:

  1. connect(langCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLang(int)) );    
  2. // 载入不同的语言包    
  3. void WizarDialog::changeLang( int langIndex )    
  4. {    
  5.   QTranslator *translator = new QTranslator(qApp);    
  6.   switch( langCombo->currentIndex() ){    
  7.   case 0:    
  8.     translator->load(QString("./language/pt_BR"));    
  9.     break;    
  10.   case 1:    
  11.     translator->load(QString("./language/en_US"));    
  12.     break;    
  13.   case 2:    
  14.     translator->load(QString("./language/zh_CN"));    
  15.   default:    
  16.     break;    
  17.   }    
  18.   qApp->installTranslator( translator );    
  19.   this->initGUI();    
  20. }   
  21. // initGUI() 中会有大量的tr函数    
  22. void WizarDialog::initGUI()    
  23. {    
  24.   this->setWindowTitle(tr("RTA04W"));    
  25.   /* ...... */    
  26. }  

这两种情况,也可以复合起来用。

需要说明的时, 一般我们使用设计器来设计界面UI,也就是程序源码中我们看到的 ***.ui文件,在载入翻译器后,我们应该调用 ui->retranslateUi() ,这个函数实际上就是把界面控件的text重新载入一遍,可以在 ui_***.cpp中看到该函数的实现。

5、在帮助文档中,关于 QTranslator::load有这样一句话。

The data is not copied. The caller must be able to guarantee that data will not be deleted or modifiled.

这段话明确的说明了,QTranslator在load以后,并没有把qm文件中的数据拷贝一份,而是在需要的时候去查询字符串。如果qm在这期间被删除或修改,对程序都是有影响的。扩展开来,QTranslator必须保证要一直有效,如果在函数中定义的局部变量,函数结束后就自动释放掉了,那么翻译工作就不能正常进行。所以建议在private中定义个成员变量 QTranslator* app_translator;来确保整个翻译工作的正确性。


MFC-多语言转换(方法+案例) MFC-语言翻译 阅读详情

相关推荐

QT国际化

/ 中文环境下的日期格式QString formattedDate = QDate::currentDate().toString(tr("yyyy年MM月dd日 dddd"));

深之JohnChen的专栏 2141

Qt使用语言家进行国际化,实现多国语言切换

在使用Qt进行项目的开发,国际化的需求还是比较常见的,这里对Qt中国际化的实现进行总结,并结合相应的示例,以便大家学习,如有错误之处,欢迎大家批评指正。

XCJandLL的博客 9720

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

QT制作多语言包,实现多语言切换。

天道酬勤 2万+

QT 国际化详解

简介 国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程。Qt支持现在使用的大多数语言,特别是: 所有东亚语言(汉语、日语和朝鲜语) 所有西方语言(使用拉丁字母) 阿拉伯语 西里尔语言(俄语和乌克兰语等) 希腊语 希伯来语 泰语和老挝语 所有在Unicode ...

qq_27278957的博客 6343

Qt实现多国语言(即界面翻译)可实时进行切换

新建一个Qt Widgets Application的工程, 然后在UI界面上放置QLabel以及一个按钮 最终要实现点击按钮,实现QLabel上的文字进行中英切换 大致步骤: 1.由界面的UI信息,生成ts文件 2.由ts文件,翻译后,生成qm文件 3.通过代码调用qm文件,进行语言切换 然后,在工程的pro文件下添加: TRANSLATIONS += qzher

sinat_35523212的博客 2万+

QT 多语言 中英文切换

本文详细的介绍了利用Qt语言大师工具,实现Qt程序的多国家语言切换。例如新建界面、pro参数、更新翻译、QT预言家翻译语言、翻译中文、翻译英文、发布翻译、核心代码、h源代码、cpp源代码、演示效果等操作。也可以使用ini文件、xml文件来实现同样的功能,新建两个字段通过全局判断来获取不同的字段来实现多语言切换。

断点 5627

QT多国语言动态切换常见例子

QT多国语言需要用到三个工具: l        Lupdate:生成ts文件 l        Linguist:翻译ts文件中的字符串 l        Lrelease:生成qm文件   这三个工具都是QT自带的工具,在相关的安装路径下。   1.    准备一个界面工程 新建工程命名为: cabagge_langsw, 使用设计师设计界面

蔡祥钦的博客 2124

QT使用多国语言及linguist工具使用

在QT代码中使用不同语言.qm文件就能让程序转换成相应的语言。但必须有相应语言的字库支持才能转换成功,否则会出现乱码或空格。字体库有各种格式,需要放在/usr/lib/fonts目录下才行,下图圈出来的是我使用的中文字体库与英文字体库。 支持的字体库有了之后,就开始使用.qm文件来进行多国语言切换了。在代码中.H需要添加头文件, #include <QTranslator> #include <QApplication> QTranslator *translator

心上枫叶红的博客 1475

在VS中实现QT的多国语言翻译

QT的多国语法翻译非常的实用,可以将开发完成的软件,直接翻译成另外一种语言,而不需要更改代码,也就是说一次开发可以同时发布多个语言版本的软件。 翻译过程 创建翻译文件:从代码中自动提取出能翻译的文本,生成中间ts文件。 翻译元素:编辑ts文件,手动翻译每一项。 发布(lrelease)翻译好的ts文件,生成qm文件。 使用qm文件,翻译相应的文本。 注意:能被翻译得文本需要使用特殊标记 ...

码灵薯的博客 1896

QT应用编程: QT国际化支持(软件界面实现多国语言切换)

一、环境介绍 操作系统介绍:win10 64位 QT版本:5.12.6 二、功能介绍 如果开发的软件需要给其他国家的客户使用,软件界面上的文字就需要根据不同的国家进行翻译,方便别人使用,QT支持语言翻译,只需要提前制作好语言翻译文件,加载即可。 三、新建一个简单的工程进行测试 3.1 设计一个UI界面 在设计UI界面的时候,可以确定下控件的文本是否支持翻译。 3.2 cpp代码 为了方便测试效果,界面加了一个弹窗按钮。程序代码里的文本如果需要翻译,需要使用tr包起来。 编译.

1807

MFC多语言切换,2019最新方法,C++代码

MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中英文切换MFC中

Qt 多国语言详细步骤

在网上看了很多qt多国语言的实现,总感觉不够详细,因此写一篇记录下,希望对新手有用 在.Pro文档中加入需要国际化转化的语言 TRANSLATIONS += English.ts\ Chinese.ts 点击更新翻译(lupdate) 在你的目录文档处会出现2个ts文档...

路的博客 1072

MFC多国语言实现方法

MFC多国语言的一种实现方法,使用VS2008编写,解压后有源码以及说明文档,简单易懂,是动态实现语言切换的非dll方法。

Qt实现多语言切换 - Qt语言家

文章目录前言1. 生成ts文件1.1 在pro文件中添加1.2 语言文字在程序中说明1.3 生成ts文件1.4 修改ts文件2 生成qm文件3 加载qm语言包 前言 为了支持国际化最关键的地方是制作多国语言包,然后再实现动态切换。QT里面既可以采用命令行也可以采用Qt Creator的界面操作来生成,这里我们利用Qt Creator来生成多国语言包。 基本流程是 生成ts文件; 生成qm文件; ...

yizhou2010的专栏 3896

PostgreSQL 超详细安装与使用教程:从入门到实战

本文将详细介绍PostgreSQL数据库的安装配置与基础使用。首先从Windows系统安装入手,分步骤讲解17.5版本的安装流程、环境变量配置及服务启动验证。接着重点介绍了pgAdmin4图形化管理工具的安装与使用,包括界面语言设置、数据库连接、创建与管理数据库等操作,同时对比了可视化操作与SQL命令两种方式。最后梳理了PgSQL基础语法,涵盖表的创建、增删改查操作、约束管理等内容,为初学者提供了完整的PostgreSQL入门指南。文章兼顾理论知识与实际操作,既适合数据库新手学习,也可作为开发人员的快速参考

gtf212的博客 1万+

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

本文提供了一份详细的Python教程,教你如何使用MediaPipe和BlazePose实现实时健身动作追踪。从环境配置、模型选型到实时视频流处理架构设计,再到健身动作量化分析和可视化反馈系统优化,教程涵盖了完整的实现步骤和代码示例,帮助开发者快速构建高效的姿态特征点检测系统。

weixin_42531779的博客 153

Qt 多国语言的实现

很多时候我们做的软件可能要分为 简体中文版,繁体版,英文版…..等等一系列,如果每一种语言搞一个版本会把人搞死的,要是一个出现了bug 那其他的版本都要搞,谁也受不了.Qt 提供了方法做 Qt国际化。 Qt 国际化(啰嗦多图版 ) 1.首先 我们在 pro 文件里加入 TRANSLATIONS += English.ts\ Chinese.ts 然后 依...

shenmingyi.blog.youkuaiyun.com 8281

DaVinci Configurator BswM模块配置

BswM是AUTOSAR(Automotive Open System Architecture)系统架构中的模块之一,它是基础软件模块(BSW)之一。BswM全称为Basic Software Module Manager(基础软件模块管理器),它负责管理和协调其他BSW模块的行为和交互,以实现整个系统的功能。BswM可以被看作是一个状态机,通过监控系统的状态和事件触发,来控制其他BSW模块的运行状态和互相配合,以达到整个系统的预期行为。

qq_59258431的博客 3943

QT 多国语言实现

1、Qt 多国语言的实现 2、Qt多国语言的实现与切换(国际化) 3、Qt 多国语言国际化 语言代码表 语言代码 语言名称 af 南非语 af-ZA 南非语 ar 阿拉伯语 ar-AE 阿拉伯语(阿联酋) ar-BH 阿拉伯语(巴林) ar-DZ 阿拉伯语(阿尔及利亚) ar-EG 阿拉伯语(埃及) ar-IQ 阿拉伯语(伊拉克) ar-JO 阿拉伯语(约旦) ar-KW 阿拉伯语(科威特) ar-LB 阿拉伯语(黎巴嫩) ar-LY 阿拉伯语(利

weixin_40948750的博客 1215

别再纠结了!实测罗技Flow、对拷线、微软Mouse without Borders,我的最终选择是...

本文通过实测对比罗技Flow、对拷线和微软Mouse without Borders等多设备控制方案,详细分析了各自的优缺点及适用场景。作者最终选择了对拷线与罗技键鼠的组合方案,为专业用户提供了稳定可靠的多设备协同办公解决方案,特别适合需要频繁传输大文件和跨设备操作的用户。

weixin_33696106的博客 405

ASP.NET Core Identity + Mysql(实战一)——注册登陆

在进行实战之前,我们先来了解一下Identity。 ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格、登录和用户数据存储。简单的来讲包括: 1.用户数据存储(使用任意你喜欢的关系型数据库,从sqllite到mysql、sqlserver等等,由Entity Framwork 支持) 2.登陆、注册外加身份认证(基于coo...

weixin_40359716的博客 1398

Qt5开发及实例V2.0-第十四章-Qt多国语言国际化

直接利用Qt的Linguist工具打开需要翻译的“.ts”文件,就可以进行字符串的翻译,这里三个版本的字符串分别译为“Hello World”(English)、“你好,世界”(Chinese)和“Orbis, te saluto”(Latin),翻译完成后保存退出,如图14.10所示。在主界面上选择“文件”→“打开”命令,选择“TestHello.ts”文件,单击“打开”按钮,根据需要设置源语言和目标语言,此处为默认状态:源语言为任意国家语言,目标语言为China的Chinese,如图14.4所示。

华为奋斗者精神 4049

高速PCB设计中的一些常用规则

目前,高速PCB产品设计中,高速接口的应用日益普及,对于复杂的设计而言,高速走线就如同“蜘蛛网”一样密布在PCB各处,因此,在进行PCB检查及评审时,必要的高速PCB设计经验法则及规则是工程师开展工作必不可少的知识储备。

一只豌豆象的博客 3413
上一篇: 详解 Qt 选择性编译和库裁减
下一篇: Qt embeded 4.5.3 在ARM-Linux的移植
HiRuyue
博客等级 码龄14年 47粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值