VS2017+QT实现中英文切换

本文介绍了Qt项目中实现中英文翻译的操作步骤。包括添加TS文件,将代码中需翻译中文用tr()包含后生成后缀为ts的文件;编辑TS文件,用Qt Linguist完成中英文翻译;发布QM文件,若工程文本改动需更新ts并重新生成;使用QM文件,重写事件刷新界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、添加TS文件

右键项目->添加->新建项

注:在生成ts文件前,可将代码中需要动态翻译的中文用tr("中文")包含。

生产后缀ts文件

二、编辑TS文件

  1. Qt VS Tools->Launch Qt Linguist打开QT语言家。

  1. 打开上面生成的中英文ts文件。

  1. 选中文本信息,分布输入对应中英文,并点击“❓”变为“✔”。

  1. 翻译完所有文本信息,直到左侧上下文不在出现黄色问号。

注意:中英文翻译格式不一致,左侧“”会为黄色!

三、发布QM文件

点击文件->发布全部,在软件目录会对应生成两个qm文件

注:如果工程文件显示文本信息有改动,需要更新ts文件(右键ts文件->lupdate),并重新生成qm文件。

四、使用QM文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    //读取语言配置
    std::shared_ptr<QSettings> iniFile = std::make_shared<QSettings>("config.ini", QSettings::IniFormat);
    QString language_value = "0";
    QString language_suffix = QString("zh");
    LANGUAGE language = UI_ZH;
    bool key = iniFile->contains("Language/english");
    if (key)
    {
        language = (LANGUAGE)iniFile->value("Language/english").toInt();
        if (language == UI_EN)
        {
            language_suffix = QString("en");
        }
    }

    QTranslator translator;
    ret = translator.load(QString(":/Resources/Translatio_") + language_suffix);
    if (!ret) {
        std::cout << "语音配置读取错误!" << std::endl;
    }
    a.installTranslator(&translator);
    
    MainForm w;
    w.setTranslator(&translator);
    w.setLanguage(language);
    w.show();

    return a.exec();
}

MainForm.h

typedef enum {
    UI_ZH,
    UI_EN
}LANGUAGE;

Q_DECLARE_METATYPE(LANGUAGE)

public:
    void setLanguage(LANGUAGE currentLanguage);

    void setTranslator(QTranslator* translator);

private:
    void changeEvent(QEvent *event);

    void switchLanguage(LANGUAGE language);

private:
    LANGUAGE _currentLanguage;
    QTranslator *_translator = nullptr;

private slots:
    void Btn_ChineseClick();
    void Btn_EnglishClick();

MainForm.cpp

void MainForm::setLanguage(LANGUAGE currentLanguage)
{
    _currentLanguage = currentLanguage;
}

void MainForm::setTranslator(QTranslator * translator)
{
    _translator = translator;
}

void MainForm::changeEvent(QEvent * event)
{
    switch (event->type())
    {
    case QEvent::LanguageChange:
        ui.retranslateUi(this);
        break;
    default:
        QWidget::changeEvent(event);
    }
}

void MainForm::switchLanguage(LANGUAGE language)
{
    QString language_qm;
    switch (language)
    {
    case UI_ZH:
        language = UI_ZH;
        language_qm = QString(":/Resources/Translation_zh");
        break;

    case UI_EN:
        language = UI_EN;
        language_qm = QString(":/Resources/Translation_en");
        break;

    default:
        language = UI_ZH;
        language_qm = QString(":/Resources/Translation_zh");
    }

    if (_currentLanguage != language)
    {
        _currentLanguage = language;
        bool ret = _translator->load(language_qm);
        if (!ret) {
            PLOG_ERROR << "语音配置读取错误!";
        }
        else {
            QVariant var = QString::number(language, 10);
            std::shared_ptr<QSettings> iniFile = std::make_shared<QSettings>("config.ini", QSettings::IniFormat);
            iniFile->beginGroup("Language");
            iniFile->setValue("english", var);
            iniFile->endGroup();
        }
    }
}

void MainForm::Btn_ChineseClick()
{
    switchLanguage(LANGUAGE::UI_ZH);
}

void MainForm::Btn_EnglishClick()
{
    switchLanguage(LANGUAGE::UI_ZH);
}

注:在需要动态切换中英文界面都需要实现重写void changeEvent(QEvent *event)事件并调用 retranslateUi(this)刷新界面;

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值