Qt - 国际化

概述

	用于语言的切换,翻译工作。

pro文件包含

#路径自己定
TRANSLATIONS = $$PWD/bin/lang/zh_En.ts \
               $$PWD/bin/lang/zh_Ch.ts

OTHER_FILES += $$PWD/bin/lang/zh_En.ts \
               $$PWD/bin/lang/zh_Ch.ts

头文件

#ifndef LANGUAGE_MANAGER_H_
#define LANGUAGE_MANAGER_H_

#include <QMap>
#include <QString>
class QTranslator;

typedef enum _LanguageType
{
    LANGUAGE_TYPE_ENGLISH,
    LANGUAGE_TYPE_CHINESE
}LanguageType;

class LanguageManager
{
public:    
    static LanguageManager *m_instance;
    static LanguageManager *getInstance();

protected:
    LanguageManager();

public:
    void initTranslator();
    bool addTranslator(const QString &languageKey, const QString &languageValue);
    bool installTranslator(const QString &languageKey);
    bool installTranslator(const LanguageType &language);

private:
    QMap<QString, QTranslator*> m_languageMap;
    QString m_currentLanguageStr;
};

#endif//LANGUAGE_MANAGER_H_

定义

#include "LanguageManager.h"

#include <QTranslator>
#include <QApplication>

LanguageManager *LanguageManager::m_instance = nullptr;
LanguageManager *LanguageManager::getInstance()
{
    if( nullptr == m_instance)
    {
        m_instance = new LanguageManager();
    }
    return  m_instance;
}

LanguageManager::LanguageManager()
{
    initTranslator();
}

void LanguageManager::initTranslator()
{
    addTranslator("zh_En", "lang/zh_En.qm");
    addTranslator("zh_Ch", "lang/zh_Ch.qm");
}

bool LanguageManager::addTranslator(const QString &languageKey, const QString &languageValue)
{
    if(m_languageMap[languageKey] == nullptr)
    {
        QTranslator * translator = new QTranslator();
        if( translator->load(languageValue) )
        {
            m_languageMap[languageKey] = translator;
        }
        else {
            return false;
        }
    }
    return true;
}

bool LanguageManager::installTranslator(const QString &languageKey)
{
    QTranslator *translator = m_languageMap[languageKey];
    if( translator )
    {
        qApp->removeTranslator(m_languageMap[m_currentLanguageStr]);
        if(qApp->installTranslator( translator ))
        {
            m_currentLanguageStr = languageKey;
            return true;
        }
        else {
            qApp->installTranslator(m_languageMap[m_currentLanguageStr]);
            return false;
        }
    }
    else {
        return false;
    }
}

bool LanguageManager::installTranslator(const LanguageType &language)
{
    switch (language) {
        case LANGUAGE_TYPE_ENGLISH:
            installTranslator("zh_En");
            break;
        case LANGUAGE_TYPE_CHINESE:
            installTranslator("zh_Ch");
            break;
    }
    return true;
}

使用说明

在这里插入图片描述

		1:main: LanguageManager::getInstance()->installTranslator(LanguageType::LANGUAGE_TYPE_CHINESE);
		2:将要翻译的内容放置到 tr(),  QT_TRANSLATE_NOOP等(具体使用查看帮助文档)内部。
		3:翻译通知 
		      1)  可以放到 changeEvent事件中 (覆盖,且存在这类事件?)
		       		protected:
                    	void changeEvent(QEvent* event);
						
						switch (event->type())
					    {
					        case QEvent::LanguageChange:
					            this->retranslateUi(this);
					            m_btnTest->setText(tr("test Btn"));
					            break;
					        default:
					            break;
					    }
		      2) 可以使用其他方式,比如,将需要被通知的类进行管理起来,改变后广播式通知即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值