前言
在使用Qt进行项目的开发,国际化的需求还是比较常见的,这里对Qt中国际化的实现进行总结,并结合相应的示例,以便大家学习,如有错误之处,欢迎大家批评指正。
项目效果
提示:以下是本篇文章正文内容,下面案例可供参考
一、生成ts文件
1.这里以我的测试项目为例,新建一个工程后,点击项目的pro文件,添加如下代码并保存
TRANSLATIONS += lang_Chinese.ts\
lang_English.ts\
lang_Russian.ts
2.依次点击工具–>外部–>Qt语言家–>更新翻译(lupdate)
3.这时候可以看到项目的pro文件同级目录下有生成对应的ts文件
二、生成qm文件
1.找到你当前项目相同编译环境的语言家(linguist.exe),双击打开
2.将之前生成的ts文件一起选中,拖拽到linguist运行界面上,会依次出现以下界面,对各界面进行相应的修改
3.依次点击ok后出现如下界面,这里进行各国语言的翻译
4.当所有的翻译源完成后,进行保存,再点击文件–>全部发布
5.这时候可以看到项目的pro文件同级目录下有生成对应的qm文件
三、qm文件使用/代码展示
这里将实现选择不同语言时,通过点击按钮修改界面翻译源,完整代码如下
1.widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTranslator>
#include <QDir>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pb_modify_clicked(); //ui界面点击该按钮,右键转到槽自动生成
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
2.widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pb_modify_clicked()
{
//记录下这几种获取路径常用的方法,大家感兴趣可以去掉屏蔽查看打印结果
QString applicationDirPath = QCoreApplication::applicationDirPath(); //程序所在路径
//QString applicationFilePath = qApp->applicationFilePath(); //程序的完整路径
//QString currentPath = QDir::currentPath(); //当前工作目录
//qDebug()<<"applicationDirPath:"<<applicationDirPath<<" applicationFilePath:"
// <<applicationFilePath<<" currentPath:"<<currentPath;
//对应的qm文件名称
//lang_Chinese.qm lang_English.qm lang_Russian.qm
QTranslator myLanguage;
if(ui->cb_language->currentIndex() == 0)
{
//注意路径,这里需要将qm文件放置程序所在路径下
//myLanguage.load(applicationDirPath + "/lang_Chinese.qm"); //对应qm文件路径
//建议使用资源文件的方式,这样在发布程序时可以防止文件丢失
myLanguage.load(":/lang_Chinese.qm");
}
else if(ui->cb_language->currentIndex() == 1)
{
//myLanguage.load(applicationDirPath + "/lang_English.qm");
myLanguage.load(":/lang_English.qm");
}
else if(ui->cb_language->currentIndex() == 2)
{
//myLanguage.load(applicationDirPath + "/lang_Russian.qm");
myLanguage.load(":/lang_Russian.qm");
}
qApp->installTranslator(&myLanguage);
this->ui->retranslateUi(this);
}
3.widget.ui
总结
本文讲述的Qt中使用语言家(linguist)来实现国际化的功能,文中例程也比较简单,实际开发工作中往往会在代码中进行一些控件的文本赋值,这个时候就要考虑到使用tr()函数来对那些文本进行处理,这样才能够让语言家识别到需要修改的文本,当需要更新翻译的时候,重复上述生成ts及qm文件的操作就行了。使用Qt语言家(linguist)生成qm文件的方法都是如文中的一样,实际进行操作下就可以掌握了。
hello:
共同学习,共同进步,如果还有相关问题,可在评论区留言进行讨论。
参考博客:
QT ——添加多国语言
Qt 多国语言详细步骤
文中提到的添加资源文件,可以参考这篇博客:
qt添加资源文件