Qt 系统下的qm翻译文件

一、使用背景

如果,当你使用QMessageBox、QFileDialog等系统提供的方法时,可能打开的界面中有个控件提示信息未汉化。
其实,qt是提供的qm翻译文件的,所以我们可以使用它来进行翻译了。
首先说明这里针对的是linux系统。

二、qt系统的翻译文件位置

在/usr/share/qt4/translations 目录下 ,或者/usr/share/qt5/translations,有的都有
在这里插入图片描述
在这里插入图片描述
众多翻译文件,比如 qt_zh_CN.qm 就是中文翻译,qt_zh_TW.qm就是台湾翻译,qt_ko.qm就是韩语等,大致规则就是国家缩写,网上一搜就知道了。

三、使用qt系统的翻译文件

使用的话,可以拷贝到自己项目资源里,也可以直接使用绝对路径
关键代码就是:

	QTranslator* qtTranslator = new QTranslator;
	qtTranslator->load("/usr/share/qt4/translations/qt_zh_CN.qm");/*系统绝对路径*/
	qtTranslator->load(":/qt_zh_CN.qm");/*资源文件*/
	qApp->installTranslator(qtTranslator);

四、使用例子展示

请添加图片描述

五、代码

.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#include <QTranslator>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_comboBox_currentIndexChanged(const QString &arg1);

private:
    Ui::Widget *ui;
    QTranslator *m_translator = NULL;
};

#endif // WIDGET_H

.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QFileDialog>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->comboBox->addItem("CN");
    ui->comboBox->addItem("ja");
    ui->comboBox->addItem("ko");
    ui->comboBox->addItem("uk");

    on_comboBox_currentIndexChanged("CN");
    ui->label->setText("当前语言:CN");
}

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

void Widget::on_pushButton_clicked()
{
    QMessageBox box(QMessageBox::Question,"title","this is test");
    box.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
    box.exec();
}

void Widget::on_comboBox_currentIndexChanged(const QString &arg1)
{
    if(m_translator == NULL)
        m_translator = new QTranslator;
    ui->label->setText(QString("当前语言:%1").arg(arg1));
    if(arg1 == "CN"){
        m_translator->load("/usr/share/qt4/translations/qt_zh_CN.qm");
    }else if(arg1 == "ja") {
        m_translator->load("/usr/share/qt4/translations/qt_ja.qm");
    }else if(arg1 == "ko") {
        m_translator->load("/usr/share/qt4/translations/qt_ko.qm");
    }else if(arg1 == "uk") {
        m_translator->load("/usr/share/qt4/translations/qt_uk.qm");
    }
    qApp->installTranslator(m_translator);
}

void Widget::on_pushButton_2_clicked()
{
    QFileDialog::getExistingDirectory(this,"文件选择","/");
}

Qt 中,可以通过重新加载 `qm` 文件来实现中英文切换。`qm` 文件Qt 语言国际化的文件格式,包含了翻译后的字符串和相应的语言信息。 以下是实现中英文切换的步骤: 1. 在项目中添加多语言支持,可以通过 Qt Creator 的 `File -> New File or Project -> Files and Classes -> Qt -> Qt Resource File` 创建一个 `.qrc` 文件,然后在其中添加 `ts` 文件作为翻译文件。可以通过 Qt Linguist 编辑 `ts` 文件,将翻译后的字符串保存到 `qm` 文件中。 2. 在代码中加载 `qm` 文件,可以通过 `QTranslator` 类实现。比如,在 `main()` 函数中加载 `qm` 文件: ``` int main(int argc, char *argv[]) { QApplication a(argc, argv); // 加载默认语言qm 文件 QTranslator translator; translator.load(QLocale::system(), "myapp", "_", ":/translations"); a.installTranslator(&translator); // ... } ``` 这里使用了 `QLocale::system()` 来获取当前系统的默认语言,然后通过 `load()` 函数加载相应的 `qm` 文件。`_:translations` 表示 `qm` 文件所在的文件夹。 3. 在界面上添加一个按钮或者菜单项,用于触发中英文切换。在按钮的槽函数中,重新加载相应的 `qm` 文件,然后更新界面文本即可。比如: ``` void MainWindow::on_switchLanguage_triggered() { // 加载中文的 qm 文件 QTranslator translator; translator.load("myapp_zh", ":/translations"); qApp->installTranslator(&translator); // 更新界面文本 ui->retranslateUi(this); } ``` 在这个示例代码中,我们在按钮槽函数中加载了中文的 `qm` 文件,并通过 `retranslateUi()` 函数来更新界面文本。需要注意的是,如果此时有打开的对话框,也需要调用对话框的 `retranslateUi()` 函数来更新对话框的文本。 以上就是通过重新加载 `qm` 文件来实现中英文切换的方法。需要注意的是,重新加载 `qm` 文件会使程序重新分配内存,可能会导致一定的性能消耗,因此应该根据实际情况进行使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值