对在Qtopia中添加国际化支持一文补充
2007-05-29 16:28
453 查看
经过对Qt的分析, 发现实际上qt的原理是将各种文字编码先转化为utf8编码,然翻译为qm文件来显示本地字符!
这里不使用findstr、msg2qm工具,而采用另外的qt工具lupdate 、lrelease、linguist来完成本地化操作
以qt2/tutorial/t1 作为中文翻译例子
进行了少部分修改,加入了中文字体支持
#include <qapplication.h>
#include <qpushbutton.h>
#include <qtranslator.h>
int main( int argc, char **argv )
{
QApplication a( argc, argv );
//加载中文字体
//QFont font("wenquanyi",14,50,FALSE,QFont::Unicode);
QFont font("unifont",14,50,FALSE,QFont::Unicode);
a.setFont( font );
//关键代码 ,加载qm
QTranslator *translator = new QTranslator(0);
translator->load( "t1_zh.qm", "." );
a.installTranslator( translator );
QPushButton hello( QPushButton::tr("Hello world!"), 0 );
hello.resize( 100, 30 );
a.setMainWidget( &hello );
hello.show();
return a.exec();
}
TEMPLATE = app
CONFIG += qt warn_on release
HEADERS =
SOURCES = main.cpp
TARGET = t1
REQUIRES=small-config
# 加入需要生成的翻译文件,这里采用中文
TRANSLATIONS = t1_zh.ts
执行
lupdate t1.pro
就会在当前目录下生成t1_zh.ts采集的文本文件了,修改为你采用的编码文本!
修改后的t1_zh.ts
<!DOCTYPE TS><TS>
<context>
<name>QPushButton</name>
<message>
<source>Hello world!</source>
<translation>你好!</translation>
</message>
</context>
</TS>
在文件菜单选择release, 提示保存为qm翻译文件即可
既然知道qt是采用utf8编码才操作各种文本, 我们就可以借助iconv强大的编码转换功能完成同样的工作! 我是因为linguist在我平台上无法翻译才只好这么做!
修改t1_zh.ts后转换编码,这里采用gb2312->utf8转换.
iconv -f gb2312 -t utf8 t1_zh.ts t1.ts
lrelease翻译编码文件
lrelease t1.ts -qm t1_zh.qm
运行t1
./t1 -qws
显示中文
要注意的是ts文件中<translation></translation>不能有空格,
<translation ></translation> 翻译成的qm文件是不能够显示的!
[2]Qt 国际化编程 http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/i18n/index.html
这里不使用findstr、msg2qm工具,而采用另外的qt工具lupdate 、lrelease、linguist来完成本地化操作
以qt2/tutorial/t1 作为中文翻译例子
进行了少部分修改,加入了中文字体支持
#include <qapplication.h>
#include <qpushbutton.h>
#include <qtranslator.h>
int main( int argc, char **argv )
{
QApplication a( argc, argv );
//加载中文字体
//QFont font("wenquanyi",14,50,FALSE,QFont::Unicode);
QFont font("unifont",14,50,FALSE,QFont::Unicode);
a.setFont( font );
//关键代码 ,加载qm
QTranslator *translator = new QTranslator(0);
translator->load( "t1_zh.qm", "." );
a.installTranslator( translator );
QPushButton hello( QPushButton::tr("Hello world!"), 0 );
hello.resize( 100, 30 );
a.setMainWidget( &hello );
hello.show();
return a.exec();
}
1. 先修改t1.pro文件,添加TRANSLATIONS
lupdate与findstr功能差不多,只是生成XML格式的文字采集文本TEMPLATE = app
CONFIG += qt warn_on release
HEADERS =
SOURCES = main.cpp
TARGET = t1
REQUIRES=small-config
# 加入需要生成的翻译文件,这里采用中文
TRANSLATIONS = t1_zh.ts
执行
lupdate t1.pro
就会在当前目录下生成t1_zh.ts采集的文本文件了,修改为你采用的编码文本!
修改后的t1_zh.ts
<!DOCTYPE TS><TS>
<context>
<name>QPushButton</name>
<message>
<source>Hello world!</source>
<translation>你好!</translation>
</message>
</context>
</TS>
2. 使用linguist修改t1_zh.ts生成qm翻译文件
这个工具是完全图形话操作的,这里就不再赘述在文件菜单选择release, 提示保存为qm翻译文件即可
3.另类方法实现
使用iconv与lrelease结合来完成linguist的功能既然知道qt是采用utf8编码才操作各种文本, 我们就可以借助iconv强大的编码转换功能完成同样的工作! 我是因为linguist在我平台上无法翻译才只好这么做!
修改t1_zh.ts后转换编码,这里采用gb2312->utf8转换.
iconv -f gb2312 -t utf8 t1_zh.ts t1.ts
lrelease翻译编码文件
lrelease t1.ts -qm t1_zh.qm
运行t1
./t1 -qws
显示中文
要注意的是ts文件中<translation></translation>不能有空格,
<translation ></translation> 翻译成的qm文件是不能够显示的!
参考:
[1]Internationalization with Q thttp://doc.trolltech.com/qtopia2.2/html/i18n.htm[2]Qt 国际化编程 http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/i18n/index.html
相关文章推荐
- 对在Qtopia中添加国际化支持一文补充
- 在Qtopia中添加国际化支持
- 在Qtopia中添加国际化支持
- 在Qtopia中添加国际化支持
- Yii2 添加国际化支持
- 10. SpringMVC 数据验证例子3 - 添加国际化支持
- AT91SAM9260下的U-Boot移植和添加LCD驱动支持
- 对“仅通过崩溃地址找出源代码的出错行”一文的补充与改进
- IIS添加对ashx文件的支持
- 频播放器,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频本身自带 rotation 属性的旋转,重力旋转与手动旋转的同步支持,支持列表播放 ,直接添加控件为封,兼容一些 5.0 的过场效果
- 阿里云服务器以及CDN支持IPV6的方法+如何为Nginx添加ipv6模块
- 【android官方文档】android 多国语言支持 国际化
- Intellij IDEA创建Web项目添加JSTL的支持(c标签)
- u-boot-2014.10移植第18天----添加DM9000网卡支持(二)
- myeclipse重新添加spring.hibernate.struts支持
- IDEA里面为项目添加编写Groovy支持
- 使用MSAJAX Futures CTP时,在Web.config文件中添加对DataTable的转换支持
- Hi3531添加16GByte(128Gbit) NAND Flash支持
- 为不支持HTML5 placeholder特性的浏览器添加placeholder特性
- u-boot移植(四)添加网络支持