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

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)

{

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt实现国际化和多语言切换需要以下步骤: 1. 在Qt项目创建一个“ts”文件,用于存储翻译后的资源。可以使用Qt自带的工具“Qt Linguist”来创建和编辑这些文件。 2. 在Qt项目使用Qt的翻译API来翻译界面元素。例如,使用tr()函数来标记需要翻译的字符串。 3. 使用lupdate工具来生成一个“.ts”文件,其包含需要翻译的所有字符串。 4. 使用Qt Linguist编辑器来翻译这些字符串,并将它们保存到“.ts”文件。 5. 使用lrelease工具来生成一个二进制的翻译文件“qm”文件,其包含翻译后的资源。 6. 在Qt项目加载这些翻译文件,并在运行时切换语言。 下面是一个简单的示例代码,演示如何在Qt实现语言切换: ```cpp #include <QApplication> #include <QTranslator> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 加载翻译文件 QTranslator translator; translator.load("myapp_zh.qm"); app.installTranslator(&translator); // 设置界面元素的翻译 QLabel label(tr("Hello World!")); label.show(); return app.exec(); } ``` 在上面的例子,我们使用了QTranslator类来加载翻译文件,并使用installTranslator()函数将其安装到应用程序。我们还使用了tr()函数来标记需要翻译的字符串。 当应用程序启动时,它将自动加载当前系统语言对应的翻译文件。如果用户切换了语言,我们只需要重新加载对应的翻译文件即可。 希望这可以帮助你实现Qt的国际化和多语言切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值