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

e) 嗯.. 最好是全部都打勾了才好.. 工具栏上有检查选项, 通过了才打勾. 接着就是运行lrelease 工具把.ts 文件转成binary 的 .qm文件, 以便可以添加到qt 的resource 文件(.qrc) 中使用:
lrelease -verbose find.prof) 新加一个.qrc资源文件, 内容如下. 具体语法请查阅官方文档:
<RCC>g) 然后就一且正常了:
<qresource prefix="/translations" >
<file>find_ja.qm</file>
<file>find_zh.qm</file>
</qresource>
</RCC>
qmake find.proh) 代码里大概可以这样写, 就是对qApp对象设一个translation的属性类, 注释可以用来切换语言:
nmake
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 相对长了一些.
以上. 代码见这里.



