QT5语言国际化 动态修改
Chapter1 QT5(10)语言国际化 动态修改
原文链接:https://blog.csdn.net/qq_16234613/article/details/53811638
一、注意内容
1、国际化过程字符串需要使用unicode,Qt默认是unicode格式。而且可以使用QString对象来表示文本。
2、对于需要翻译的文本,需要使用QObject::tr(“1111”).或QApplication::translate(“Widget”, “\346\227\213”, 0)包含,这要Qt的语言家功能才会将需要翻译的文本找到保存到ts文件中。
3、项目设置文件需要加入
TRANSLATIONS = superapp_dk.ts \
superapp_fi.ts \
superapp_no.ts \
superapp_se.ts
4、当我们生成exe时,qm文件会被打包到exe/app内部。想动态改qm文件而不用重新编译应用程序,我们可以把qm文件放在独立目录中。
5、生成的qm文件是在项目文件家中,而不是exe文件所在文件夹。所以 加载时需要注意qm文件的路径。文件路径获取教程
二、步骤
1、写代码时字符串记得使用tr包含
2、在pro文件中加入TRANSLATIONS += DuEnglish.ts
3、编译文件
4、工程的菜单: 工具 -> 外部 -> 语言专家 ->更新翻译(lupdate) 生成ts文件
5、使用linguist工具打开文件进行翻译。翻译一个文本后点击窗口上的绿色对号按钮
6、工程的菜单: 工具 -> 外部 -> 语言专家 ->发布翻译(Release) 生成qm文件
7、使用:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator qtTranslator;
qtTranslator.load("DuEnglish.qm");
a.installTranslator(&qtTranslator);
Dialog w;
w.show();
return a.exec();
}
动态切换:
void Dialog::OnBtnChangetoEnglish()
{
QTranslator qtTranslator;
qtTranslator.load("DuEnglish.qm");
pQApplication->installTranslator(&qtTranslator);
ui->retranslateUi(this); //更新ui
}
Chapter2 Qt使用语言家进行国际化,实现多国语言切换
原文链接:https://blog.csdn.net/XCJandLL/article/details/125575079
前言
在使用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文件的方法都是如文中的一样,实际进行操作下就可以掌握了。
Chapter3 QT 国际化详解
原文链接:https://blog.csdn.net/qq_27278957/article/details/97929898
Chapter4 Qt-国际化(语言切换)
原文链接:https://blog.csdn.net/qq_35629971/article/details/124074161
在Qt中,所有的输入部件和文本绘制方式对Qt支持的所有语言都提供了内置的支持。Qt内置的字体引擎可以在同一时间正确而且精细地绘制不同的文本,这些文本可以包含来自众多不同书写系统的字符。如果想了解更多的相关知识,可以在帮助中通过Overview of the Translation Process关键字查看。
Qt对把应用程序翻译为本地语言提供了很好的支持,可以使用Qt Linguist工具完成应用程序的翻译工作,这个工具在第1章就已经介绍过了,这里将进一步介绍。
使用Qt Linguist翻译工具
这一小节先通过一个简单的例子介绍Qt中翻译应用程序的整个过程,然后再介绍其中需要注意的方面,这部分内容可以通过Qt Linguist Manual关键字查看。在Qt中编写代码时要对需要显示的字符串调用tr()函数,完成代码编写后对这个应用程序的翻译主要包含3步:
①运行lupdate工具,从C++源代码中提取要翻译的文本,这时会生成一个.ts文件,这个文件是XML格式的;
②在Qt Linguist 中打开.ts文件,并完成翻译工作;
③运行lrelease工具,从.ts文件中获得.qm文件,它是一个二进制文件。这里的.ts文件是供翻译人员使用的,而程序运行时只需要使用.qm文件,这两个文件都是与平台无关的。
下面通过一个简单的例子来介绍整个翻译过程,该例子实现了将一个英文版本的应用程序翻译为简体中文版本。
第一步,编写源码。新建Qt Widgets应用,项目名称为myI18N,类名为MainWindow ,基类保持QMainWindow不变。建立完项目后,单击mainwindow.ui文件进入设计模式,先添加一个“&File”菜单,再为其添加一个“&New”子菜单并设置快捷键为Ctrl+N,然后往界面上拖入一个Push Button。