Qt 多国语言的实现

很多时候我们做的软件可能要分为 简体中文版,繁体版,英文版…..等等一系列,如果每一种语言搞一个版本会把人搞死的,要是一个出现了bug 那其他的版本都要搞,谁也受不了.Qt 提供了方法做 Qt国际化。

Qt 国际化(啰嗦多图版 )

1.首先 我们在 pro 文件里加入

TRANSLATIONS += English.ts\ 
                Chinese.ts

然后 依次 点击 菜单栏 - 工具 - 外部 -Qt语言家 - 更新翻译(lupdate)

这里写图片描述

如果 执行完 这一步 pro 同级目录下 如果没有 生成 English.ts 和 chinese.ts 文件 (XX.ts) 名字 对应你pro 里面 加的名字
那要看一下 控制台 6 概要信息的 报错(我自己遇到的坑)
这里写图片描述

这里写图片描述

成功的话本地就会生成 2个ts 文件
这里写图片描述

下一步 需要 用 Linguist 打开生成的 ts文件
这里写图片描述

然后翻译一下(想要打开ts文件 里面有你想要翻译的内容,必须要把代码用’tr()’包裹住)
这里写图片描述

然后 保存 - 发布 - 工具 - 外部 - Qt 语言家 - 发布翻译(lrelease)

这里写图片描述

然后本地会生成对应的 qm 文件 这就是我们需要的
这里写图片描述

下面又分为两步(!!!)

如果你的界面是UI 控件拖的(可以实时的切换) 和 界面是纯代码撸的 是不一样的(不能实时的切换)

这里我自己是遇到了这个问题,如果有错误请各位大佬指点

1.纯代码实现的界面:

这里写图片描述
这里写图片描述

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTranslator m;
    m.load(":/English.qm");
    qApp->installTranslator(&m);


    Widget w;
    w.show();

    return a.exec();
}
void Widget::initUi()
{
    this->setStyleSheet("font-size:20px;font-family:Microsoft Yahei;color:#272c2f;");
    this->setWindowTitle(tr("码农小明"));
    QVBoxLayout* m_VbLayout = new QVBoxLayout();


    QLabel* m_line1 = new QLabel(tr("鹅鹅鹅"));
    QLabel* m_line2 = new QLabel(tr("曲项向天歌"));
    QLabel* m_line3 = new QLabel(tr("白毛浮绿水"));
    QLabel* m_line4 = new QLabel(tr("红掌拨清波"));

    m_VbLayout->addWidget(m_line1);
    m_VbLayout->addWidget(m_line2);
    m_VbLayout->addWidget(m_line3);
    m_VbLayout->addWidget(m_line4);
    m_VbLayout->setContentsMargins(5,5,5,5);

    QLabel* m_author = new QLabel(tr("咏鹅 -驼宾王"));

    QHBoxLayout* m_HbLabyout = new QHBoxLayout();

    m_HbLabyout->addWidget(m_author);

    m_HbLabyout->addLayout(m_VbLayout);

    QVBoxLayout *m_layout = new QVBoxLayout();

    m_layout->addLayout(m_HbLabyout);

    this->setLayout(m_layout);
}

这样实现的 没法实时的切换 只能在 程序启动的时候进行选择语言
* (程序运行中想切换 就用 读写配置文件 当前选择的 语言,然后重启程序 程序打开的时候根据配置文件进行 语言的读取)*

2.UI 拖的 控件

void Widget::on_ChineseButton_clicked()
{

    QTranslator m;
    m.load(":/Chinese.qm");
    qApp->installTranslator(&m);
    this->ui->retranslateUi(this);
}

void Widget::on_EnglishButton_clicked()
{

    QTranslator m;
    m.load(":/English.qm");
    qApp->installTranslator(&m);
    this->ui->retranslateUi(this);
}

这里写图片描述
这里写图片描述

拖控件可以实时的更新界面 (具体为啥 代码撸的界面 不能实时的更新 我不明白) 有知道的大佬告诉一下 谢谢!

    98年菜鸡一枚,请大佬们多多照顾!

猜你喜欢

转载自blog.csdn.net/weixin_42837024/article/details/81747421