QT语言国际化 动态修改

77 篇文章 16 订阅
38 篇文章 9 订阅


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。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值