qt国际化

首先,说明下,本篇内容为qt国际化的进阶版,如果是入门级别的,qt怎么适配国际化,可以看对应的书籍,本篇文章,编写了动态国际化,下面是对应的demo,在开始前,先分享下qt获得当前系统语言的方法,屡试不爽(但是在有的语言环境下获得的也有不准的情况,需要特殊处理)

  QLocale local; 
  qInfo() << local.name() << local.uiLanguages().value(0).replace("-", "_");

把中划线换成下划线的原因是qm文件的需要,当时没有使用name 而使用uiLanguage的原因是在繁体还是维语、藏语等name获取的有问题,有不对应的情况;

但是在有的环境下获取为C,需要做特殊处理;因为自己实际项目中截止目前用到的国际化有:简体中文,繁体、正体、英文、维语、藏语,其它的语言环境目前没有用到;

目前uiLanguages能满足自己的实际项目需要;

1.搭建工程:cmake

#cmake所需最低版本
cmake_minimum_required(VERSION 3.7)

#工程名
project(demo)

#查找依赖库
find_package(Qt5 COMPONENTS
    Core
    Widgets
REQUIRED)

SET(CMAKE_AUTOMOC ON)

#查找文件
file(GLOB SRC_LIST "*.cpp" "*.h")

#生成可执行文件
add_executable(demo ${SRC_LIST})

#find_package(Qt5Core REQUIRED)
#find_package(Qt5Widgets REQUIRED)
#find_package(Qt5Gui REQUIRED)

set(Qt_LIBS
    Qt5::Core
    Qt5::Widgets
)

#链接目标库
target_link_libraries(
    ${PROJECT_NAME}
    ${Qt_LIBS}
    )

2.编写代码

#include "widget.h"

#include <QApplication>
#include <QTranslator>
#include <QDebug>

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

    QTranslator qtTranslator;
    QString str;
    str = "demo-" + QString("zh_CN") + ".qm";
    qtTranslator.load(str);
    qInfo() << str;
    a.installTranslator( &qtTranslator );

    Widget w;
    w.setTranslate(&qtTranslator);
    w.show();
    w.resize(500, 500);

    return a.exec();
}
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QComboBox>
#include <QTranslator>

class Widget :public QWidget
{
    Q_OBJECT

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

    void setTranslate(QTranslator *tran);

private Q_SLOTS:
    void onComboBoxIndexChanged(int index);

private:
    void initUI();
    void updateShow();

    QHBoxLayout *hLayout;
    QLabel *contentsLabel;
    QLabel *tipsLabel;
    QComboBox *languageCombox;
    QTranslator *translator;

};


#endif//WIDGET_H
#include "widget.h"

#include <QDesktopWidget>
#include <QApplication>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    initUI();
    QDesktopWidget *deskdop = QApplication::desktop();
    move((deskdop->width() - this->width())/2, (deskdop->height() - this->height())/2);
    connect(languageCombox, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxIndexChanged(int)));
}

Widget::~Widget()
{
}

void Widget::setTranslate(QTranslator *tran)
{
    translator = tran;
}

void Widget::onComboBoxIndexChanged(int index)
{
    switch (index) {
    case 0:
        translator->load("demo-en_US.qm");
        break;
    case 1:
        translator->load("demo-zh_CN.qm");
        break;
    default:
        translator->load("demo-zh_CN.qm");
        break;
    }

    updateShow();
}

void Widget::initUI()
{
    hLayout = new QHBoxLayout;
    contentsLabel = new QLabel(tr("I love China"));
    tipsLabel = new QLabel(tr("please change language:"));
    languageCombox = new QComboBox();
    languageCombox->insertItem(0, tr("chinese"));
    languageCombox->insertItem(0, tr("english"));

    hLayout->addWidget(contentsLabel);
    hLayout->addWidget(tipsLabel);
    hLayout->addWidget(languageCombox);
    setLayout(hLayout);
}

void Widget::updateShow()
{
    contentsLabel->setText(tr("I love China"));
    tipsLabel->setText(tr("please change language:"));
}

3.效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值