QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言
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国际化示例, 检测系统语言,设置适合语言,按键切换显示语言的更多相关文章
- [iOS]怎样在iOS开发中切换显示语言实现国际化
1.在Project设置,加入中英两种语言: 2.新建Localizable.strings文件,作为多语言相应的词典,存储多种语言,点击右側Localization,勾选中英: watermark/ ...
- CRM 2013 切换显示语言
想要更改显示需要,必须在服务器上安装语言包.不过语言包中仅包含系统的实体和字段的翻译,想要自定义的实体字段根据选择的语言变化,必须做好实体字段的翻译. 安装好语言包后,找到设置->管理-> ...
- developers.google.com上的开发者文档如何切换显示语言
一个小的tip,搜索到developers.google.com上的开发者文档,有些被翻译了的会自动显示中本版,如果想看英文版,可以在当前url后面加?hl=en,就会变成英文版.估计是根据地区直接推 ...
- 菜鸟学SSH(三)——Struts2国际化自动检测浏览器语言版
前几天发了一篇Struts国际化的博客——<菜鸟学习SSH(二)——Struts2国际化手动切换版>,有网友提了一个意见,见下图: 于是就有了下面修改的版本: web.xml <?x ...
- thinkphp多语言设置
thinkphp多语言设置有点'高大上',为什么说它有点'高大上'呢?因为本人设置了好久才弄好,而本人之所以弄了好久的原因,竟然是因为'开启语言设置必须得先开启初始化系统的行为类',所以,在这里,因为 ...
- Linux改变语言设置的命令
--Linux语言设置--------------2013/09/22Linux中语言的设置和本地化设置真是一个很繁琐的事情,时不时的会出现乱码的情况,在这篇文章中讨论的是shell中出现乱码的一些解 ...
- thinkphp 3.2多语言设置
1.将CheckLangBehavior.class.php(没有的话去下载完整版)文件放到此目录下:\ThinkPHP\Extend\Behavior 2.修改目录下文件Application\Ho ...
- iOS多语言(国际化)开发(尾随系统 + APP内手动设置)
一:尾随系统切换语言 1>创建好项目project后, 新建一个多语言文件: 2>加入要设置的语言类型: 3>加入成功 细心的朋友可能会发如今English后面写的是3 Files ...
- 【转载】Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解
Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解 1清风揽月10人评论5006人阅读2017-06-21 15:48:43 博文说明[前言]: 本文 ...
随机推荐
- .NET调用JAVA的WebService方法
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料, ...
- Spring 缓存注解@Cacheable 在缓存时候 ,出现了第一次进入调用 方法 ,第二次不调用的异常
代码: @Override @Cacheable(value = CACHE_NAME, key = "'CartItemkey_'+#uId") public List<S ...
- 程序如何在RAM ROM运行,内存分配与分区
关于RAM ROM RAM与ROM就是具体的存储空间,统称为存储器 RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储.它又分为: 动态 ...
- Object-Oriented Metrics: LCOM 内聚性的度量
Object-Oriented Metrics: LCOM https://www.computing.dcu.ie/~renaat/ca421/LCOM.html Object-Oriented M ...
- <2013 12 01> 一篇很好的关于windows编程的入门指导(2013年末写的,比较前沿)
我之前做了不少嵌入式开发,从单片机到ARM到RTOS到Linux等等,可以说走的是电气工程师的路线,对编程也是实用性的,跟计算机学院的科班套路不同.最近同学做一个windowsCE的项目请我帮忙,之前 ...
- CSS标签内多余内容隐藏
CSS: <style> .mazey{width:100px;} .nowrap{overflow:hidden;text-overflow:ellipsis;white-space:n ...
- if控制器+循环控制器+计数器,控制接口分支
但是我不想这么做,接口只想写一次,让循环控制器和if控制器去判断接口,执行我想要的分支.这里遇到了一个问题,if控制器通过什么去判断接下来的分支?我引入了一个计数器的概念.起始值为0,每次循环加1,将 ...
- Hexo+yilia博客添加背景音乐
个人主页:https://www.yuehan.online 现在博客:www.wangyurui.top 第一步: 打开网易云音乐的官网:https://music.163.com/ 第二步: 搜索 ...
- 007-sql整体概述
一.概述 sql基础:数据库.数据表.行.列.关系 查询: Select 字段1,字段2,* from 表 where 条件 去除重复:Distinct 必须放在所有列前面 区间语句:BETWEEN ...
- 剑指offer 面试55题
面试55题: 题目:二叉树的深度 题:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路: ①如果一棵树只有一个节点,它 ...