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 博文说明[前言]: 本文 ...
随机推荐
- 【BZOJ2882】工艺 后缀自动机
[BZOJ2882]工艺 Description 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的 ...
- SpringMVC 资源国际化实现以及常见问题
资源国际化可以很方便的实现web项目语言的切换,解决了web项目按需显示不同语言界面的问题. SpringMVC 的资源国际化基于JDK的java.util.ResourceBundle实现,经过Sp ...
- Error: unable to connect to node rabbit@10: nodedown 修改hostname后异常
https://blog.csdn.net/witsmakemen/article/details/22651365 [root@d bin]# rabbitmqctl start_appStarti ...
- https nginx openssl 自签名
公私钥:公钥可以唯一解密私钥加密过的数据,反之亦然.以下用P指代公钥,V指代私钥.SSL过程:需要两对公私钥(P1,V1),(P2,V2),假设通信双方是A和B,B是服务器,A要确认和它通信的是B:A ...
- python系列五:Python3列表list
#!usr/bin/python#-*-coding:gbk-*-#列表list'''可以看到a b c 三个是同一id值,当改变当中任一列表元素的值后,三者会同步改变.但d的元素值不会变,改变d的元 ...
- QSystemSemaphore 系统级信号量
在之前的一篇文章中,我们讲过了QSemaphore类,其可以用于同步多线程.而今天要讲到的这个类,根据名字就可以猜测到,其可以在整个系统中使用,即它既可以用于多线程,也可以用于多线程.当然,这也意味着 ...
- Windows常见窗口样式和控件风格
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用)WS_CHILDWINDOW 子窗口(不能与WS_PO ...
- [置顶] 我的Android进阶之旅------>Android解决异常: startRecording() called on an uninitialized AudioRecord.
今天使用AudioRecord进行录音操作时候,报了下面的异常. E/AndroidRuntime(22775): java.lang.IllegalStateException: startReco ...
- P2P-BT对端管理协议(附BT协议1.0)
对端管理 指的是远端peer集合的管理(尽管自身client也能够视为一个peer.但对端管理不包括自身peer) 一个client(client)必须维持与每一个远程peer连接的状态信息,即1V1 ...
- asp.net 站点公布
asp.net 站点公布 1.安装并打开IIS. 2.用visual studio创建站点,文件夹为d:\website\website1 3.IIS中加入站点,站点名称必填.物理路径与已有的相应好. ...