qt 国际化(翻译时会触发changeEvent)
1. 修改工程文件 .pro ,加入翻译源文件 hello_world.ts:
TRANSLATIONS += \
Resource/translations/hello_world.ts
写代码时需要注意下面两点:
2. 源码用 utf-8 字符集
3. 源码中需要翻译的字符串必须用英文(不能有中文或其它语言),则需要用 tr() 函数。
例如:
QMessageBox::information(this,tr("Information"),tr("Hello world."));
4.更新翻译源文件:
工具-》外部-》qt 语言家-》更新翻译(lupdtae)
工具 lupdate 自动分析工程文件 .pro ,找到翻译源文件 hello_world.ts ;然后会分析源码中包含在 tr 中的字符串,写入到翻译源文件 hello_world.ts 中。翻译源文件是一个 xml 文件。
<context>
<name>Hello</name>
<message>
<location filename="HelloWorld.ui" line="14"/>
<source>Frame</source>
<translation type="unfinished"></translation>
</message>
</context>
5、修改翻译源文件 hello_world.ts :
5.1. 你可以直接编辑翻译源文件进行翻译
5.2. 你也可以用工具 linguist 进行翻译
6. 在代码中加载需要的翻译资源文件
6.1. 把翻译资源文件放到程序的资源文件中
把翻译资源文件放到程序的资源文件中后,就会被当做程序的资源编译进程序中。所以访问翻译资源文件的方式与其它资源的访问方式相同。即:“:/translat/hello_world.qm” 。
用“:/”来指定是从资源中加载。
例如:
//本地化程序资源
QTranslator myappTranslator;
//把翻译文件放在了程序资源中
myappTranslator.load(":/translations/hello_world.qm");
qApp->installTranslator(&myappTranslator);
6.2. 从翻译资源文件中直接加载
//本地化程序资源
QTranslator myappTranslator;
//把翻译文件放在了程序资源中
myappTranslator.load("C:/translations/hello_world.qm");
qApp->installTranslator(&myappTranslator);
7. 编译:
工具-》外部-》qt 语言家-》更新翻译(lrelease)
翻译完翻译源文件后,需要翻译编译工具(lrelease)把翻译源文件编译成翻译资源文件 hello_world.qm 。
8. qt 资源:
qt 翻译资源在安装目录下的 translate 目录下。
9. 在程序中做翻译菜单:
当语言进行切换时,需要调用 ui->retranslateUi(this); 更新主窗口。
如果非主窗口,则这个函数会触发 void changeEvent(QEvent *e) 事件。
例如:
void CHelloWorld::changeEvent(QEvent *e)
{
LOG_MODEL_DEBUG("MainWindow", "MainWindow::changeEvent.e->type:%d", e->type());
switch(e->type())
{
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
}
}
http://blog.csdn.net/kl222/article/details/38681303
qt 国际化(翻译时会触发changeEvent)的更多相关文章
- Qt 国际化翻译
简介 Qt Linguist 提供了一套加速应用程序翻译和国际化的工具.Qt 使用单一的源码树和单一的应用程序二进制包就可同时支持多个语言和书写系统. 使用 QTranslator 来加载生成的 qm ...
- Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)
Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Q ...
- 【Qt】Qt国际化【转】
简介 Qt国际化属于Qt高级中的一部分,本想着放到后面来说,上节刚好介绍了Qt Linguist,趁热打铁就一起了解下. 对于绝大多数的应用程序,在刚启动时,需要加载默认的语言(或最后一次设置的语言) ...
- QT国际化 一 (lupdate/linguits/lrelease)
QT国际化(lupdate/linguits/lrelease) 本文由乌合之众瞎写http://www.cnblogs.com/oloroso/ qt国际化其实就是qt中字符串的字符集编码的设置.当 ...
- Qt国际化详细介绍,中文乱码以及解决方案
Qt国际化的一般步骤 运行 lupdate,从应用程序的代码中提取所有界面上的可见字符. 这些可见字符必须被 tr() .QCoreApplication::translate().Qt ...
- QT国际化(中英转换)
转载:https://blog.csdn.net/u012528526/article/details/54707233 QT国际化(中英转换) 我们都知道在安卓中,想做国际化很简单,只需要建立对应的 ...
- Ios国际化翻译工具
IOS Translation Tool(IOS国际化翻译工具) 介绍 当IOS项目国际化的时候,手工去翻译每一个字符串是一件非常痛苦的事情.尤其是当项目中存在N多种语言.而且又很难保证,手工翻译的准 ...
- 给iview项目加一个i18n国际化翻译
看了上一篇博客吗?我们就根据那一篇博客来,用里面的项目,进行我们接下来国际化翻译项目. 我们安装vue-i18n和js-cookie npm install vue-i18n npm install ...
- QT中QLineEdit的editingFinished()信号在按下回车时会触发两次的解决办法
class MyLineEdit : public QLineEdit { Q_OBJECT public: MyLineEdit(QWidget * parent = 0) : QLineEdit( ...
随机推荐
- SQL学习之SELECT子句顺序
下面来总计下之前的随笔中所说过的所有的SELECT子句的顺序. 子句 说明 是否必须使用 SELECT 要返回的列或者表达式 ...
- 试用cmd markdown
欢迎使用 Cmd Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录思想 ...
- IIS7.5(IIS7)配置伪静态urlrewrite
找了好久,终于找到了.已经测试通过,收藏. 转载自:http://jingyan.baidu.com/article/67508eb4ff92c69cca1ce49a.html 首先新建一个应用程序池 ...
- Unity StrangeIoc框架 (三)signal信号方式
先创建TestRoot using UnityEngine; using System.Collections; using strange.extensions.context.impl; publ ...
- TCP的流量控制
TCP协议作为一个可靠的面向字节流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现. 要区分TCP的流量控制和拥塞控制: 流量控制是发送方的发送数据的速 ...
- C++学习之指针的常见错误
C++学习之指针的常见错误 我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程 ...
- java.el.PropertyNotFoundException解决方法
今天在开发中遇到了java.el.PropertyNotFoundException异常,检查JSP页面.Action.Bean.都没有发现错误 在网上搜了一下可能是我的bean不是一个标准的bean ...
- 各种排序算法(C语言)
#include <stdlib.h> #include <stdio.h> void DataSwap(int* data1, int* data2) { int temp ...
- python基础学习笔记6--异常
异常 1.什么是异常? python用异常对象来表示( exception object)异常情况.如果异常没有被处理或扑捉,程序就会所谓的回溯(TraceBack,一种错误信息)而终止执行: 2. ...
- Mysql mysqlimport 导入数据
在mysql 数据库中可以用 mysqlimport 工具来实现数据的导入!mysqlimport 导入数据简单,但是这个也要满足一定的条件 1.既然是把数据导入到数据库,你总有一个数据库用户账号吧 ...