日历
网志分类
展开全部
· ***    All     ***
· ***    Mood    ***
· ***    Life    ***
· *** Technology ***
· ***     Yc     ***
· ***  Cartoon   ***
· *** Collection ***
· ***  Unsorted  ***
媒体播放器

Get the Flash Player to see this player.
SkyDrive is currently not available.

站内搜索
友情链接
· 我的歪酷 非非共享界
· 风雨妖虹
· kingbeful@csdn
· 手心的太阳@瞬间十年
· Moment@Travis
· 江南麒麟居
· εз毛线团εз
· 乌拉的neverland
· 碾过的日子 闲也陶陶
· 狡兔三窟 *^.^*
· 橄榄林的风
· 水色の街
· Powerful and delicate, Life struggling
· 阿德咖吧
· 陷阱
· 风之华
· vkobe的Neverland@@
· 白日梦已死 · 伤越夜海
· 望天
· 空の軌跡
· 没什么好东西的空间
· 心情...咖啡屋
· 随风独自凉
· Some where i belong
· .★·°双晨·故事°☆ .
· BigWorld的记事本
· *Sara's*
· 人生若只如初见
· 宠辱不惊闲看庭前花开花落·去留无意漫随天外云卷云舒
· 我思我不在
· 飞扬飘雨
· lazy的猫猫
常用链接
· [Google]
· [Google Accounts]
· [IT Items]
· [Telnet@Yanxi]
· [Wikipedia]
· [Linux Manpages]
· [Mofile.com]
· [163888.net]
· [fm.qq.com]
· [Proxy]
· [Animepaper.net]
· [FreeproxySite]
· [gonwan@fc2]
· [skydrive.live.com]
· [gonwan@lifelogger]

订阅 RSS

0109903

歪酷博客

逆さまの蝶
In this Craziness
Uncertainy
一人一人の想いを
僕らは何処かに遺せるだろうか

In this Craziness
You gave me life
一つの想いを
僕らは何処まで守れるだろうか



« 上一篇: QT4 学习笔记 (4) 下一篇: QT4 学习笔记 (6) »
丸子·酱 @ 2008-12-02 18:05

    本篇说一下Qt 所谓的高级特性: i18n 的支持 (Internationalization).

    首先明确一点, Qt 对于unicode的支持是相当好的, 用来表示字符串的QString保存的是16-bit 的QChar(官方文档上这么写哦), 跟java的char 是一样的. 但是但是..实际上QString的内部数据一点也没有用到QChar, 大概是为了performance的考虑不吧, 附一段源码(/src/corelib/tools/qstring.h):
    struct Data {
        QBasicAtomic ref;
        int alloc, size;
        ushort *data;
        ushort clean : 1;
        ushort simpletext : 1;
        ushort righttoleft : 1;
        ushort asciiCache : 1;
        ushort capacity : 1;
        ushort reserved : 11;
        ushort array[1];
    };
    Data *d;
    大概是这么个情况. 下面来说一下怎么样支持i18n.
    a) 首先要做的就是把要翻译的string 统统用tr() 函数包起来(其实是QObject::tr() ). 当然还有其它的方法, 不过这个最容易.
    b) 编辑.pro 文件, 加入需要支持的语言信息. 比如我们要支持简体中文和日本语:
TRANSLATIONS  = find_zh.ts \
                                   find_ja.ts
     c) 运行lupdate 来生成上面两个.ts 文件. lupdate会自动搜索需要翻译的字符串(用tr()函数包起来的作用):
lupdate -verbose find.pro
     d) 用Qt linguist 来编辑生成的两个文件, 当然如果你够nb.. 可以手动编辑... 截张图:


    e) 嗯.. 最好是全部都打勾了才好.. 工具栏上有检查选项, 通过了才打勾. 接着就是运行lrelease 工具把.ts 文件转成binary 的 .qm文件, 以便可以添加到qt 的resource 文件(.qrc) 中使用:
lrelease -verbose find.pro
     f) 新加一个.qrc资源文件, 内容如下. 具体语法请查阅官方文档:
<RCC>
    <qresource prefix="/translations" >
        <file>find_ja.qm</file>
        <file>find_zh.qm</file>
    </qresource>
</RCC>
     g) 然后就一且正常了:
qmake find.pro
nmake
     h) 代码里大概可以这样写, 就是对qApp对象设一个translation的属性类, 注释可以用来切换语言:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTranslator appTranslator;
    appTranslator.load("find_" + QLocale::system().name(), ":/translations");
    //appTranslator.load("find_zh.qm", ":/translations");
    //appTranslator.load("find_ja.qm", ":/translations");
    app.installTranslator(&appTranslator);
    FindDialog *dialog = new FindDialog;
    dialog->show();
    return app.exec();
}
     还是截张图吧..三种语言...:

    可以看到, qt 的layout 又发挥作用了, 中文和日文的dialog 相对长了一些.

    以上. 代码见这里.


曾经的这一天...



评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定