Qt中英文翻译(涉及多种场景)

qt中英文切换涉及到一个软件两个文件,分别是QtLinguist、.ts文件和.qm文件。

1、在Pro中添加

TRANSLATIONS += en.ts \
               ch.ts

添加这个文件后qmake,然后如下操作点击更新:
在这里插入图片描述
这个时候会生成2两个文件en.ts和ch.ts。
在这里插入图片描述
2、将这两个文件添加到项目中方便修改。
在这里插入图片描述
3、这个时候我们可以在工程中进行准备工作了。
首先把代码中除.ui文件外的所有中文使用tr()括起来,使Qt Linguist能够识别到。
然后如下操作
在这里插入图片描述
使用QtLinguist方式打开。
在这里插入图片描述
找出所有需要翻译的中文,在下面输入栏中进行翻译。
翻译后点击以下操作进行确定。在这里插入图片描述
然后点击保存。
在这里插入图片描述
最后如下进行发布。
在这里插入图片描述
发布后会生成两个.qm文件。
将文件放在执行文件同级目录,方便后面进行加载。
在这里插入图片描述
4、加载qm文件实时切换中英文。

void Widget::on_pushButton_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/en.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);

}

void Widget::on_pushButton_2_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/ch.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
}

这步完成后基本上只有主页在.ui文件中的控件可以实时中英文切换,但是还有很多切换没有成功。

4、这个时候有其它场景的中英文切换如下。
场景1:UI文件中的控件翻译,其它页面的.ui需要进入事件来进行配置。如下

void Form::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        this->ui->retranslateUi(this);
    }
}

场景2:主页和其它页非.ui文件中的控件(控件为成员对象时)

void Form::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        this->ui->retranslateUi(this);
        m_label->setText(tr("你好"));
        m_label2->setText(tr("测试2"));
    }
}

跟上面是不是很像,没错就是大部分一样,但是

this->ui->retranslateUi(this);

它只能修改.ui中的中英文,非.ui的需要自己来加载。

场景3:主页和其它页非.ui文件中的控件(控件为局部对象时)
这个就是控件在函数里面创建,翻译方法如下:

Form2::Form2(QWidget *parent) :
    QWidget(parent)
{
    QLabel* lab = new QLabel(tr("武汉加油"),this);
    lab->setGeometry(0,0,120,20);

    QPushButton* btn = new QPushButton(tr("武汉加油"),this);
    btn->setGeometry(0,30,120,20);
}

Form2::~Form2()
{
}

void Form2::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        QList<QLabel *> labs =this->findChildren<QLabel *>();
        foreach (QLabel *lab, labs)
        {
          lab->setText(tr("武汉加油"));
        }

        QList<QPushButton *> btns =this->findChildren<QPushButton *>();
        foreach (QPushButton *btn, btns)
        {
          btn->setText(tr("武汉加油"));
        }
    }
}

以上是介绍实时中英切换的,但是同时存在一个中文版本和一个英文版本是没有这么复杂的,直接加载.qm文件就行了,后面操作基本上都不需要了。

这里还介绍一个更简单的实时切换中英文的方法:
如下:
.cpp文件

void Widget::on_pushButton_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/en.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
    qApp->exit();

}

void Widget::on_pushButton_2_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/ch.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
    qApp->exit();
}

main.cpp文件:

    UMainWindow w;
    w.show();
    bool ok = a.exec();
    f(!ok)
    {
        QProcess::startDetached(qApp->applicationFilePath(), params);
        return ok;
    }

这种是通过自动重启来实现的中英文切换。

在这里插入图片描述
在这里插入图片描述
源码

Qt实现中英文界面切换可以通过以下步骤进行: 1. 准备好中英文的翻译文件:Qt使用一种名为"Qt 语言家庭文件"(.ts)的文件来存储翻译文本。你需要准备好文和英文的翻译文件,分别命名为`zh***然后依次打开文和英文的翻译文件。在工具,你可以逐个翻译每个文本字符串,并将其保存到对应的翻译文件。 3. 在代码加载翻译文件:在你的Qt应用程序的初始化代码,使用`QTranslator`类来加载翻译文件。例如,你可以创建一个`QTranslator`对象,并使用`load()`方法加载对应的翻译文件。 4. 切换界面语言:在你的应用程序提供一个切换语言的选项,例如一个菜单项或按钮。当用户选择切换语言时,你可以使用`QApplication::installTranslator()`方法来安装对应的翻译文件,并调用`QCoreApplication::translate()`方法来更新界面上的文本。 下面是一个简单的示例代码,演示了如何在Qt实现中英文界面切换: ```cpp #include <QApplication> #include <QTranslator> #include <QMessageBox> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建翻译器对象 QTranslator translator; // 加载文翻译文件 if (translator.load("zh_CN")) { // 安装翻译器 app.installTranslator(&translator); } else { QMessageBox::warning(nullptr, "Error", "Failed to load zh_CN translation file."); } // 创建主窗口等其他代码... return app.exec(); } ``` 当用户选择切换语言时,你可以重新加载对应的翻译文件,并更新界面上的文本。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方忘忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值