Qt时区检测及语言加载

Qt时区检测及语言加载

当我们能够对完成软件翻译之后,需要根据计算机当前时区来选择加载何种语言的翻译,这是就涉及到了计算机时区的检测和语言包的自动加载。

1. 整体流程说明
想要完成这项工作,可通过以下及步骤:  
1. 获取电脑当前时间;  
2. 判断当前所在国家,这一项主要是根据根据获取的时间来完成的;  
3. 加载对应的翻译包。   

2. 实现过程
2.1. 时区获取

在Qt当中,可以通过`QDateTime`来获取系统当前日期及时间,通过这个类可以得到当前所在时区,但得到时区之后并不能判断出所属国家,国家的判定需要其他类来完成;  

 2.2. 国家判别
在获取到当前所在的时区之后,可通过`QTimeZone`类中的`country()`函数来完成国家的判定;  
需要注意的是:`country`这一枚举对象所在的头文件在`QLocale`当中,如果想要单独使用Qt中的`country`要注意头文件的正确包含。  

2.3 语言包加载

在获取所在的国家之后可以根据需要来完成相应的语言包加载,译文包使用的时候要注意`QTranslator`对象的声明周期,这一对象的生命周期不能短于界面程序,否则将无法正确显示译文。  

关于如何生成翻译文件我会在其它的文章中进行说明。


3. 示例代码

#include <QApplication>
#include <QTranslator>
#include <QTimeZone>
//===============================================
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//---------------------------------------------------------------------
    //语言设置
    QTranslator translator;//创建翻译员


    QTimeZone localPosition = QDateTime::currentDateTime().timeZone();//记录当前时区
    //时区所在国家判定
    if(QLocale::Country::China == localPosition.country()
            || QLocale::Country::Taiwan == localPosition.country())
    {
        QString dir = QDir::currentPath(); //获取当前路径
        translator.load("languages_translate_MainPart.qm",dir);//加载中文语言包
        a.installTranslator(&translator);//语言包生效
    }
//---------------------------------------------------------------------
    MainWindow w;
    w.show();
    return a.exec();
}


猜你喜欢

转载自blog.csdn.net/sinat_34130812/article/details/80492748
今日推荐