1.效果如下图,开启就自动检测系统语言,选择系统语言显示,

UI有控件设置,在中文和英文之间切换。。

2. 源码

dialog.h

#ifndef DIALOG_H
#define DIALOG_H #include <QDialog>
#include <QtGui> class Dialog : public QDialog
{
Q_OBJECT public:
Dialog(QWidget *parent = 0);
~Dialog();
void translateLanguage(); private:
QLabel *label1;
QLabel *label2;
QComboBox *combox;
QTranslator *translator; private slots:
void comboxChange(); }; #endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include <QDebug> Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
QVBoxLayout *vLayout = new QVBoxLayout;
label1 = new QLabel;
label2 = new QLabel;
translator = new QTranslator; qApp->installTranslator(translator); //安装翻译器 combox = new QComboBox();
QStringList list;
list << "English" << "Chinese";
combox->addItems(list); this->translateLanguage();
vLayout->addWidget(label1);
vLayout->addWidget(label2);
vLayout->addWidget(combox);
setLayout(vLayout); connect(combox, SIGNAL(currentIndexChanged(int)), this, SLOT(comboxChange()));
} void Dialog::translateLanguage()
{
label1->setText(tr("test I18N"));
label2->setText(tr("hello world"));
} void Dialog::comboxChange()
{
qDebug() << combox->currentText(); if(combox->currentText() == "Chinese")
{
translator->load(QString(":/qm/myI18N_zh_CN.qm")); //选择翻译文件
this->translateLanguage();
}
else
{
translator->load(QString(":/qm/myI18N_zh_EN.qm"));
this->translateLanguage();
}
} Dialog::~Dialog()
{
}

main.cpp

#include "dialog.h"
#include <QApplication>
#include <QTranslator> int main(int argc, char *argv[])
{
QApplication a(argc, argv); QTextCodec *codec = QTextCodec::codecForName("System");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec); QTranslator translator;
QLocale locale;
if( locale.language() == QLocale::English ) //获取系统语言环境
{
qDebug() << "English system" ;
translator.load(QString(":/qm/myI18N_zh_EN.qm")); //选择翻译文件
a.installTranslator(&translator);
}
else if( locale.language() == QLocale::Chinese )
{
qDebug() << "中文系统";
translator.load(QString(":/qm/myI18N_zh_CN.qm"));
a.installTranslator(&translator);
} Dialog w;
w.resize(200,200);
w.show(); return a.exec();
}

QRC.qrc

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>qm/myI18N_zh_EN.qm</file>
<file>qm/myI18N_zh_CN.qm</file>
</qresource>
</RCC>

3. 由上可知,国际化的关键是怎么生成 myI18N_zh_CN.qm myI18N_zh_EN.qm 这样的翻译文件??

步骤一: 将UI控件设置好,需要变换语言的控件,统一在translateLanguage()内设置tr("...."),用英文设置。

步骤二:在工程pro文件中加入一行  TRANSLATIONS = myI18N_zh_EN.ts,保存文件。

步骤三:点击工程pro文件打开终端,

输入命令 $ lupdate I18N.pro   ,后面接的工程pro文件名,执行完后可以发现生成一个 *.ts文件,

打开可以发现这是xml文档,里面标记有所有tr("...")的内容。

步骤四:用QT Linguist打开生成的 myI18N_zh_EN.ts文件,选择要翻译成的目标语言

如图翻译每个tr("..."),并保存,再去查看myI18N_zh_EN.ts即可发现,里面已有翻译标记。

步骤五:在终端窗口输入 $lrelease I18N.pro 命令, 完成后发现生成所需的二进制文件myI18N_zh_EN.qm。

如果还要翻译为其他语言,可重复上面的动作,生成不同的 *.qm文件即可。。。

*.qm文件也可以导入到资源文件QRC.qrc,编译到程序内部。

*.qm文件生成后,即可按上面程序一样使用,进行语言显示切换。。。

QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言的更多相关文章

  1. [iOS]怎样在iOS开发中切换显示语言实现国际化

    1.在Project设置,加入中英两种语言: 2.新建Localizable.strings文件,作为多语言相应的词典,存储多种语言,点击右側Localization,勾选中英: watermark/ ...

  2. CRM 2013 切换显示语言

    想要更改显示需要,必须在服务器上安装语言包.不过语言包中仅包含系统的实体和字段的翻译,想要自定义的实体字段根据选择的语言变化,必须做好实体字段的翻译. 安装好语言包后,找到设置->管理-> ...

  3. developers.google.com上的开发者文档如何切换显示语言

    一个小的tip,搜索到developers.google.com上的开发者文档,有些被翻译了的会自动显示中本版,如果想看英文版,可以在当前url后面加?hl=en,就会变成英文版.估计是根据地区直接推 ...

  4. 菜鸟学SSH(三)——Struts2国际化自动检测浏览器语言版

    前几天发了一篇Struts国际化的博客——<菜鸟学习SSH(二)——Struts2国际化手动切换版>,有网友提了一个意见,见下图: 于是就有了下面修改的版本: web.xml <?x ...

  5. thinkphp多语言设置

    thinkphp多语言设置有点'高大上',为什么说它有点'高大上'呢?因为本人设置了好久才弄好,而本人之所以弄了好久的原因,竟然是因为'开启语言设置必须得先开启初始化系统的行为类',所以,在这里,因为 ...

  6. Linux改变语言设置的命令

    --Linux语言设置--------------2013/09/22Linux中语言的设置和本地化设置真是一个很繁琐的事情,时不时的会出现乱码的情况,在这篇文章中讨论的是shell中出现乱码的一些解 ...

  7. thinkphp 3.2多语言设置

    1.将CheckLangBehavior.class.php(没有的话去下载完整版)文件放到此目录下:\ThinkPHP\Extend\Behavior 2.修改目录下文件Application\Ho ...

  8. iOS多语言(国际化)开发(尾随系统 + APP内手动设置)

    一:尾随系统切换语言 1>创建好项目project后, 新建一个多语言文件: 2>加入要设置的语言类型: 3>加入成功 细心的朋友可能会发如今English后面写的是3 Files ...

  9. 【转载】Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解

    Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解 1清风揽月10人评论5006人阅读2017-06-21 15:48:43   博文说明[前言]: 本文 ...

随机推荐

  1. 1878: [SDOI2009]HH的项链

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4420  Solved: 2199[Submit][Statu ...

  2. EasyNVR内网摄像机接入网关+EasyNVS云端管理平台,组件起一套轻量级类似于企业级萤石云的解决方案

    背景分析 对于EasyNVR我们应该都了解,主要应用于互联安防直播,对于EasyNVR,我们可以清楚的发现,EasyNVR的工作机制是EasyNVR拉取摄像机的RTSP/Onvif视频流,然后客户端可 ...

  3. java.lang.ClassFormatError: Truncated class file

    之前跑的很好的程序,因为我本地IDE出了问题的原因,倒是编译的错误的class文件,结果点击的时候报这样的错误,后来重新clean了工程,重新打包解压启动,问题依旧. 解决办法: 把tomcat的wo ...

  4. JS replace()方法替换变量(可以对变量进行全文替换)

    转至:http://blog.sina.com.cn/s/blog_6552200b0102ve60.html 事情是这样的: 我要用 JS 替换一个多行文本的关键字 正常,没有变量的时候应该是这样: ...

  5. Vue.js之组件嵌套

    Vue.js中组件嵌套有两种方式 第一种:注册全局组件 例如在components文件夹下新建一个User.vue组件,然后在main.js文件中注册全局组件 //注册全局组件 Vue.compone ...

  6. python函数回顾:getattr()

    描述 getattr() 函数用于返回一个对象属性值. 语法 getattr 语法: getattr(object, name[, default]) 参数 object -- 对象. name -- ...

  7. (1)sql server 同网段复制

    转自:https://blog.csdn.net/hliq5399/article/details/51678774(文末有复制系列文章链接) 一.背景 在复制的运用场景中,事务发布是使用最为广泛的, ...

  8. Python API:openstack

    OpenStack 是一个越来越流行的.用于部署基础架构即服务 (IaaS) 云的开源解决方案.OpenStack 附带了一个仪表板 Web 应用程序,非常适合执行手动任务,比如启动单个虚拟机 (VM ...

  9. 第一次java小考心得体会

    本周四Java第一次上课,测试了一个ATM程序,从两点半开始到五点半结束. 整整三个小时,结果怎么说呢,大概可以用惨不忍睹来形容吧. 因为之前有一个测试样卷,以为考试内容不会变的我,只是把学生信息管理 ...

  10. JAVA中遍历Map和Set方法,取出map中所有的key

    Java遍历Set集合 1.迭代器遍历: Set<String> set = new HashSet<String>(); Iterator<String> it ...