Qt4学习笔记 (5)

This is a repost from my previous Qt learning series, based on Qt 4.3.

    本篇说一下Qt所谓的高级特性: i18n 的支持 (Internationalization).
    首先明确一点, Qt对于unicode的支持是相当好的, 用来表示字符串的QString保存的是16-bit的QChar(官方文档上这么写哦), 跟java的char是一样的. 但是但是..实际上QString的内部数据一点也没有用到QChar, 大概是为了performance的考虑不吧, 附一段源码(/src/corelib/tools/qstring.h):

    大概是这么个情况. 下面来说一下怎么样支持i18n.

a) 首先要做的就是把要翻译的string统统用tr()函数包起来(其实是QObject::tr()). 当然还有其它的方法, 不过这个最容易.

b) 编辑*.pro文件, 加入需要支持的语言信息. 比如我们要支持简体中文和日本语:

c) 运行lupdate来生成上面两个*.ts文件. lupdate会自动搜索需要翻译的字符串(用tr()函数包起来的作用):

d) 用Qt linguist来编辑生成的两个文件, 当然如果你够nb.. 可以手动编辑… 截张图:
qt_5_1

e) 嗯.. 最好是全部都打勾了才好.. 工具栏上有检查选项, 通过了才打勾. 接着就是运行lrelease工具把*.ts文件转成binary的*.qm文件, 以便可以添加到Qt的resource文件(*.qrc) 中使用:

f) 新加一个*.qrc资源文件, 内容如下. 具体语法请查阅官方文档:

g) 然后就一切正常了:

h) 代码里大概可以这样写, 就是对QApplication对象设一个translation的属性类, 注释可以用来切换语言:

    还是截张图吧..三种语言…:
qt_5_2
    可以看到, Qt的layout又发挥作用了, 中文和日文的dialog相对长了一些.

    以上. 代码见这里.

Leave a Reply

Your email address will not be published. Required fields are marked *