【QT】多语言翻译

简介: 【QT】多语言翻译

QT多语言翻译

方法

  1. tr()函数获取需要翻译的文本
  2. lupdate.exe编译生成xxx.ts文件
  3. linguist.exe进行翻译
  4. lrelease.exe生成去xxx.qm文件

示例

单一语言翻译,直接main中注册

QTranslator *translator = new QTranslator;

translator->load("lang_en.qm");

a.installTranslator(translator);//安装翻译器

多种语言

#include "widget.h"
#include "ui_widget.h"
#include  <QVBoxLayout>
#include <QTranslator>
#include <QApplication>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    m_languageBox = new QComboBox;
    m_languageBox->addItem("Chinese","zh");
    m_languageBox->addItem("English","en");
    m_languageBox->addItem("Latin","la");
    m_languageBox->addItem("Franch","fr");

    connect(m_languageBox,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLanguage(int)));

    //tr()函数用于获取需要翻译的文本

    m_nameLabel = new QLabel(tr("快乐的威猛先生"));
    m_signLabel = new QLabel(tr("人生如戏。"));

    setWindowTitle(tr("测试"));
    resize(400,100);

    QVBoxLayout* layout = new QVBoxLayout(this);
    layout->addWidget(m_languageBox);
    layout->addWidget(m_nameLabel);
    layout->addWidget(m_signLabel);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::changeLanguage(int index)
{
    static QTranslator *translator;
    if(translator){
        qApp->removeTranslator(translator);
        delete translator;
        translator = nullptr;
    }

    translator = new QTranslator;

    QString languageCode = m_languageBox->itemData(index).toString();
    QString qmFile = "lang_"+languageCode;

    if(translator->load(qmFile)){
        qApp->installTranslator(translator);
    }

    //翻译文本——找不到则用逗号后面的
    m_nameLabel->setText(tr("TXT_NAME_WORD","Happy Mr. Weimeng"));
    m_signLabel->setText(tr("TXT_SIGN_WORD","Life is like a play."));
    setWindowTitle(tr("TXT_TITLE_WORD","Test"));
}

image-20220324143331190

image-20220324141646936


注意事项

  • pro文件添加,xx.ts

image-20220324115943675

  • g++ Maybe you forgot to setup the environment?

解决方法——https://www.cnblogs.com/ybqjymy/p/13552032.html

  • lupdate.exe

image-20220324120259504

  • 翻译完打钩

image-20220324133329545

  • 点击发布

image-20220324133418779

相关文章
|
7月前
|
存储 数据安全/隐私保护 C++
Qt 中文文档 Qt5.15 PDF Class (从官网Qt 5.15 翻译)
Qt 中文文档 Qt5.15 PDF Class (从官网Qt 5.15 翻译)
549 0
|
7月前
|
程序员
QT 官方QObject对象翻译要点(纯属个人翻译,不靠谱)
QT 官方QObject对象翻译要点(纯属个人翻译,不靠谱)
86 1
|
7月前
|
XML 自然语言处理 数据格式
Qt国际化翻译解决方案
Qt国际化翻译解决方案
170 0
|
6月前
|
存储 数据安全/隐私保护
Qt Installer Framework翻译(5-3)
Qt Installer Framework翻译(5-3)
|
7月前
|
SQL XML API
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
56 0
QT QTranslator 中英文翻译linguist语言家 翻译过程
QT QTranslator 中英文翻译linguist语言家 翻译过程
QT QTranslator 中英文翻译linguist语言家 翻译过程
Qt中文翻译(官方文档,界面,工具等)集锦
Qt中文翻译(官方文档,界面,工具等)集锦
735 0
|
小程序 IDE 开发工具
好工具推荐系列:Qt多国语言翻译国产软件digital translate
好工具推荐系列:Qt多国语言翻译国产软件digital translate
298 0
|
开发者
Qt翻译原生widgets(QTextEdit右键菜单等)
简述 在国际化的处理中,如果使用 Qt widgets 自带的原生功能,其中很多文本并不会被自行翻译,例如:QTextEdit 右键菜单(复制、粘贴)。 最好的方式是 Qt 能提供相关模块的 ts 翻译源,开发者根据所要翻译的内容自行翻译。但是,查找 Qt 安装目录,并没有相关的的翻译源。既然这样,那我们只能自行解决了! 简述 添加翻译源 提取翻译源 发布 加载
2452 0