Qt5 实现多国语言

引言

目的:自用/笔记

时间:2018-02-13 01:13

平台: Windows 7

项目:将英语界面添加德语和土耳其语翻译

步骤

使用默认语言写出整个工程,这里使用英语作为缺省语言

标记期望译为多国语言的字符串,在代码中把相关字符使用tr()替换

例如在代码中,把界面上的"Select Output Image" 期望转换为多国语言,只需要将代码中的字符替换为 tr(”Select Output Image")

QFileDialog::getSaveFileName(this,"SelectOutputImage",QDir::currentPath(),"*.jpg;;*.png);

QFileDialog::getSaveFileName(this,tr("SelectOutputImage"),QDir::currentPath(),"*.jpg;;*.png);

//这行代码功能是选择存储路径,getSaveFileName函数第二个参数是文件选择导航器界面的标题栏,我们希望他参与多国语言翻译,所以使用tr函数将其"标记"

把翻译文件添加到工程文件(.PRO文件)中,添加该语句:

TRANSLATIONS = translation_de.ts translation_tr.ts

ts文件是Qt用以实现多国语言的一个中间文件,再此声明一下

de代表德国语,tr代表土耳其语(这是个很好的命名习惯,可读性高而且后期还要使用这个文件名继续生成其他文件)

使用Qt的 lupdate 工具生成TS文件

此步骤就是生成第3步中向工程声明的两个ts文件,其原理是遍历源代码和 UI 文件寻找可翻译的文本并创建ts文件。翻译人员使用Qt提供的Linguist工具就可以翻译这些文本

lupdate 位于Qt安装目录的bin文件夹,如:C:\Qt|Qt5.9.1\msvc2015\bin

方法一: 直接在Qt中运行lupdate,工具->外部->Qt语言家->lupdate

方法二:使用命令行工具

使用CD指令切换到项目目录,也就是有.pro文件的那个目录

输入C:\Qt\Qt5.9.1\msvc2015/bin/lupdate.exe *.pro执行lupdate

运行结束后,工程路径下就会有两个ts文件

运行linguist 并加载刚刚生成的两个ts文件,翻译好保存

创建QM文件。创建ts文件方法相同(直接IDE中运行或命令行运行),把lupdate替换为lrelease即可

把QM文件添加到工程的resources中

Qt中负责多国语言的是QTranslator类,所以要向mainWindow.h中添加包含文件

本例中需要翻译出两国语言,故声明两个QTranslator 对象作为MainWindow的私有成员

#include

QTranslator *turkishTranslator;

QTranslator *germanTranslator;

在构造函数中添加以下代码,以便启动软件时自动加载翻译文件

turkishTranslator = new QTranslator(this);

turkishTranslator

->load(":/translations/translation_tr.qm");

germanTranslator = new QTranslator(this);

germanTranslator

->load(":/translations/translation_de.qm");

//承于QObject在父对象销毁时会自动去销毁子对象。(父类被销毁时,子类也被销毁)

在界面中创建语言设定菜单右键单击接界面,点选创建菜单栏,命名为Language,然后创建子项:

English

German

Turkish

创建完成后,在底部的Action Editor中就会显示三个入口,这些入口是创建菜单时自动生成的

右键单击Turkish后选择转到槽,触发类型:triggered()

x向生成的函数中添加如下代码

void MainWindow::on_actionTurkish_triggered()

{

qApp -> installTranslator(turkishTranslator);

}

同理,向German的槽中添加如下代码

void MainWindow::on_actionTurkish_triggered()

{

qApp -> installTranslator(germanTranslator);

}

对actionEnglish执行同样的操作。与之前不同,由于工程本身就是用英语写的,所以要想显示英语,只需移除turkishTranslator 和 germanTranslator即可,代码如下

void MianWindow::on_actionEnglish_triggered()

{

qApp -> removeTranslator(turkishTranslator);

qApp -> removeTranslator(germanTranslator);

}

为保证界面翻译成功运行,我们需要重写changeEvent,在mianWindow.h中添加如下代码

void changeEvent(QEvent *event);

在mainWindow.cpp文件中添加如下代码:

void MainWindow::changeEvent(QEvent *event)

{

if(event -> type() == QEvent::LanguageChange)

{

}

}

qt支持的html5,用 Qt 5 中实现多国语言支持相关推荐

  1. WP7多国语言支持 from:http://blog.csdn.net/lee353086/article/details/6260676

    WP7多国语言支持 Kagula 2011/3/17 前言 本文阅读对象是有一定Visual Studio 2010使用经验的程序员. 这里通过一些示例介绍如何让你的Windows Phone7 Wi ...

  2. ubuntu mysql支持中文_ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程序、mysql 数据库不能处理中文的错误...

    ubuntu 16.04 对于腾讯云主机要添加源,因为腾讯云主机(CVM)的源库中包很少 文件/etc/apt/sources.list是一个普通可编辑的文本文件,保存了ubuntu软件更新的源服务器 ...

  3. OEA 中的多国语言实现

    本篇博客主要描述在 OEA 框架中的多国语言框架的原理及应用. 多国语言常见实现及原理分析 管理软件平台,一般来说,都应该支持多国语言,以支持应用程序走向国际化.OEA 最近也提供了多国语言框架,它可 ...

  4. 【Qt】通过QtCreator源码学习Qt(十):多国语言支持

    1.获取系统支持的语言 QStringList uiLanguages;uiLanguages = QLocale::system().uiLanguages(); 2.从设置中获取想要显示的语言,尝 ...

  5. WinCE设置多国语言支持

    最近项目中需要支持中(简繁)日韩英多种语言,在网上找了很多解决办法,最后发现还是MSDN最好. [c-sharp] view plaincopy [HKEY_LOCAL_MACHINE/SYSTEM/ ...

  6. Android中测试多国语言漏翻的情况(一)

    背景:由于现在手机销售到各个国家,所以面对国际化需要进行语种的翻译,但是手机支持的40多种语言,如果全靠人力进行检测显然是支出和收入不对等的~ 目前现状:手机中的语言翻译文字实际是在String.xm ...

  7. php 识别语种,HYPHP增加多国语言支持 PHP通过用户浏览器判断来源国家方案

    PHP可以通过获取浏览器发送的 ACCEPT_LANGUAGE去检测语言 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 得到的值为 zh-CN,zh;q=0.8 zh-CN 我们只 ...

  8. 国外网盘休闲下载利器之:freeRapidDownloader 多国语言支持

    发现很多好的学习资料需要到国外网盘去搞:国内的网盘,知道的好的不是太多 可能带宽等原因,大家用BT,用迅雷.电驴之类的多,网盘像dbank华为.试用的百度.以及115等,资源等方面还没办法跟国外的比. ...

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

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

最新文章

  1. [转] WINCC教学视频
  2. DotNet语音技术实现(实现电脑发音)
  3. 显卡在电脑什么位置_DIY组装电脑教程,新手也能学会自己组装电脑
  4. 关于cocostudio动态添加控件触摸响应无效的学习
  5. Mongodb ruby driver API(中文)
  6. jacoco 源码分析 class字节码植入的冲突问题
  7. go并发编程-理解不同并发场景下的go原语
  8. Rafy 框架 - 为数据库生成注释
  9. SQL Server 2012安装错误案例:Error while enabling Windows feature: NetFx3, Error Code: -2146498298...
  10. C++中使用模板,new创建2维动态数组
  11. linux中文输入法 ibus
  12. 【渝粤题库】陕西师范大学209016《管理心理学》作业
  13. nginx搭建高性能流媒体技术
  14. java自定义异常和throw、throws的使用
  15. 多个文件进行合并取前10个数(多线程方式)
  16. 2TB虚拟本地磁盘实验
  17. iPhone删掉的照片能恢复吗?iPhone最近删除的照片怎么恢复?
  18. npm run build 打包报错primordials is not defined的解决方法
  19. iOS 设置按钮上图下文的方式
  20. Java编程:悲观锁、乐观锁的区别及使用场景

热门文章

  1. 华为“二次替代”的竞争力如何练就?
  2. 计算机程序执行的两种方式:解释执行和编译执行
  3. 开发中常见的编码和乱码问题
  4. Dance Collection
  5. 设置dvorak键盘
  6. JAVA快速排序递归算法
  7. JS字符串转换成数字的三种经典方法和代码实例
  8. 凝思linux操作系统4.2内核版本_凝思linx6.0.76操作系统安装教程
  9. 【光线追踪系列十】光追加速结构(BVH树)
  10. 本科计算机基础与应用作业,本科计算机应用基础作业一