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

时间: 2024-10-04 16:50:20

qt 国际化(翻译时会触发changeEvent)的相关文章

Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)

Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Qt的国际化. QTextCodec QTextDecoder QTextEncoder QTranslator QLocale Languages and WritingSystems 有时,国际化是比较简单的,例如,把美国的应用程序让澳大利亚或英国的用户可访问,只需要简单的改变拼写.但是,把美国的

qt 国际化

1. 修改工程文件 .pro ,加入翻译源文件 hello_world.ts: TRANSLATIONS += \ Resource/translations/hello_world.ts 写代码时需要注意下面两点: 2. 源码用 utf-8 字符集 3. 源码中需要翻译的字符串必须用英文(不能有中文或其它语言),则需要用 tr()  函数. 例如: QMessageBox::information(this,tr("Information"),tr("Hello world

Qt国际化详细介绍,中文乱码以及解决方案

Qt国际化的一般步骤 运行 lupdate,从应用程序的代码中提取所有界面上的可见字符. 这些可见字符必须被 tr() .QCoreApplication::translate().Qt_TR_NOOP().Qt_TRANSLATE_NOOP()等来包裹字符串,具体这些函数或者宏是什么功能,我们后面细说. 使用 Qt Linguist 翻译应用程序. 运行 lrelease,生成二进制的 .qm 文件,应用程序可以使用 QTranslator 加载这个文件. 翻译标志函数和宏 在类内时,使用tr

Qt的翻译文件QTranslator不能使用问题总结(原)

笔者今天在自己工程中使用翻译文件,发现没有起作用,反复查找,发现是用宏定义了命名空间,生成.ts文件时,不会加上命名空间,所以生成的.qm文件在实际使用时,会无法找到对应的语句. 如果将宏定义的命名空间修改为普通字符,则没有上述问题. 刚才是namespace MyProject{ 是用#define USNS namespace MyProject{定义好宏,直接使用宏的,所以生成文件,不能自己将宏转换导致 总结一下翻译碰到要注意的几个问题: 1,基本使用 QTextCodec * textC

QT的翻译问题

今天给同事解决问题的时候碰到一个QT的翻译问题,调用了qt的翻译更新工具,结果出来的ts文件不正确.错误的情况如下,有两个ts需要提取的翻译文件,a.cpp b.cpp 这两个文件的主要内容如下: a.cpp和b.cpp都是从一个qt的模型派生的类 a.cpp /*Qt::Display*/ xxxxx tr("文件") b.cpp /*Qt::Display*/ tr("文件") 生成的ts的问题 <location xxx a.cpp> <lo

给iview项目加一个i18n国际化翻译

看了上一篇博客吗?我们就根据那一篇博客来,用里面的项目,进行我们接下来国际化翻译项目. 我们安装vue-i18n和js-cookie npm install vue-i18n npm install js-cookie --save 第一步在main.js的js引入i18n 第二步建立src/locale文件夹, //en-US.js export default { "components": { // "langChange": 'Language switch

Odoo国际化翻译方法及示例介绍

本文主要介绍了odoo国际化翻译使用的方法及示例 国际化翻译方法 每个模块的翻译文件放在该模块目录下i18n目录里.模块内相关字符串一般用英语写成,然后通过翻译模板导出功能(Settings ? Translations ? Import/Export ? Export Translation)导出一个翻译模板pot文件.翻译人员使用翻译软件(poedit)进行翻译后,产生对应语言po文件,再放入i18n目录下供odoo加载.po文件的文件名规则一般由对应语言缩写或语言_国家组成,如中文为zh.

Qt国际化相关类(以前没见过codec-&gt;toUnicode,QTextCodec,QLocale.toString和QLocale::setDefault,QInputMethod::locale())

QTextCodec QTextCodec为文本编码之间提供转换. Qt用Unicode 来存储,绘制和操作字符串.在很多情况下你可能希望操作不同编码的数据.例如,大部分日本文档是以Shift-JIS或 ISO 2022-JP进行存储,然而俄国用户的文档是以KOI8-R 或 Windows-1251编码的. Qt提供一组QtextCodec类来实现非Unicode 和Unicode 格式之间的转换.你也可以创建自己的编码解码器. 支持的编码如下: ·        Apple Roman ·  

QT国际化

写的比较简洁 语言文件: ts:编辑翻译用的,是xml,可以用linguist(qt语言专家)或者Editplus进行翻译 qm:这种文件是ts的release版,无法编辑,发布的时候用这个 操作: 1.首先打开pro,添加TRANSLATIONS  = xxxx_zh_CN.ts xxxxx.en.ts 2.然后用lupdate xxx.pro 来生成这两个ts文件 3.翻译,qt语言专家或者其他编辑器 4.lrelase  xxx.pro或者qt语言专家中的发布或者qtcreator-->工