QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言

1.效果如下图,开启就自动检测系统语言,选择系统语言显示,

UI有控件设置,在中文和英文之间切换。。

 

2. 源码

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QtGui>

class Dialog : public QDialog
{
    Q_OBJECT
    
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
    void translateLanguage();

private:
    QLabel *label1;
    QLabel *label2;
    QComboBox *combox;
    QTranslator *translator;

private slots:
    void comboxChange();

};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include <QDebug>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    QVBoxLayout *vLayout = new QVBoxLayout;
    label1 = new QLabel;
    label2 = new QLabel;
    translator = new QTranslator;

    qApp->installTranslator(translator);  //安装翻译器

    combox = new QComboBox();
    QStringList list;
    list << "English" << "Chinese";
    combox->addItems(list);

    this->translateLanguage();
    vLayout->addWidget(label1);
    vLayout->addWidget(label2);
    vLayout->addWidget(combox);
    setLayout(vLayout);

    connect(combox, SIGNAL(currentIndexChanged(int)), this, SLOT(comboxChange()));
}

void Dialog::translateLanguage()
{
    label1->setText(tr("test I18N"));
    label2->setText(tr("hello world"));
}

void Dialog::comboxChange()
{
    qDebug() << combox->currentText();

    if(combox->currentText() == "Chinese")
    {
        translator->load(QString(":/qm/myI18N_zh_CN.qm"));  //选择翻译文件
        this->translateLanguage();
    }
    else
    {
        translator->load(QString(":/qm/myI18N_zh_EN.qm"));
        this->translateLanguage();
    }
}

Dialog::~Dialog()
{    
}

main.cpp

#include "dialog.h"
#include <QApplication>
#include <QTranslator>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTextCodec *codec = QTextCodec::codecForName("System");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);

    QTranslator translator;
    QLocale locale;
    if( locale.language() == QLocale::English )  //获取系统语言环境
    {
        qDebug() << "English system" ;
        translator.load(QString(":/qm/myI18N_zh_EN.qm"));  //选择翻译文件
        a.installTranslator(&translator);
    }
    else if( locale.language() == QLocale::Chinese )
    {
        qDebug() << "中文系统";
        translator.load(QString(":/qm/myI18N_zh_CN.qm"));
        a.installTranslator(&translator);
    }

    Dialog w;
    w.resize(200,200);
    w.show();
    
    return a.exec();
}

QRC.qrc

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>qm/myI18N_zh_EN.qm</file>
    <file>qm/myI18N_zh_CN.qm</file>
</qresource>
</RCC>



 3. 由上可知,国际化的关键是怎么生成 myI18N_zh_CN.qm myI18N_zh_EN.qm 这样的翻译文件??

步骤一: 将UI控件设置好,需要变换语言的控件,统一在translateLanguage()内设置tr("...."),用英文设置。

步骤二:在工程pro文件中加入一行  TRANSLATIONS = myI18N_zh_EN.ts,保存文件。

步骤三:点击工程pro文件打开终端,

输入命令 $ lupdate I18N.pro   ,后面接的工程pro文件名,执行完后可以发现生成一个 *.ts文件,

打开可以发现这是xml文档,里面标记有所有tr("...")的内容。

步骤四:用QT Linguist打开生成的 myI18N_zh_EN.ts文件,选择要翻译成的目标语言

如图翻译每个tr("..."),并保存,再去查看myI18N_zh_EN.ts即可发现,里面已有翻译标记。

步骤五:在终端窗口输入 $lrelease I18N.pro 命令, 完成后发现生成所需的二进制文件myI18N_zh_EN.qm。

如果还要翻译为其他语言,可重复上面的动作,生成不同的 *.qm文件即可。。。

*.qm文件也可以导入到资源文件QRC.qrc,编译到程序内部。

*.qm文件生成后,即可按上面程序一样使用,进行语言显示切换。。。

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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中的国际化和多语言切换

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值