QT程序国际化的过程

1.在所有需要采用双语或多语的地方采用QObject::tr("")将要显示的字符串包起来。
这里的字符串最好为英文,ASCII的编码在哪里都不会解码错。
tr()的作用之一是从.qm文件中取出与其所包含的内容对应的信息。
有些地方不宜采用tr(),比如定义某些变量使用的字符串,如:
static const char* strings[] = {T_TR_NOOP("Hello"),QT_TR_NOOP("World")};
可以采用QT_TR_NOOP() 和 QT_TRANSLATE_NOOP() 来标志它们。
前者用于单个字 符串,后者用于多个字符串。
如果要使用printf/sprintf之类的函数动态生成字符串,需要替换为arg(),如:
QString s = tr("Button %1").arg(i);
2.使用findtr命令为要翻译的所有文件生成一个.po文件。如:
findtr 1.cpp 2.cpp 3.cpp > 1.po
3.打开这个1.po文件,主要修改以下几项:
3.1 编码方式: 将charset=iso-8859-1中的“iso-8859-1”替换为GBK或UTF-8。
      在windows下修改时使用GBK,在linux下使用“UTF-8”
3.2 提取出的字符串: 提取出的字符串格式如下:
      msgid "ExampleWidget::&File"
        msgstr ""
      其中ExampleWidget为文件的指定范围,在翻译时要去掉,最后变为
      msgid "::&File"
        msgstr "文件(&F)"
4.使用qt提供的工具msg2qm将.po转化为.qm文件,如:
msg2qm 1.po 1.qm
一般这个工具放在qt安装目录的tools/msg2qm下,有时还需要make生成一下,最终的格式可能是:
./msg2qm 1.po 1.qm
5.在程序中添加调用1.qm的代码:
QTranslator *translator = new QTranslator(0);
translator->load("1.qm",".");
   qApp->installTranslator(translator);
此外,Qt 还提供了类似于 msgmerge 的工具 mergetr,它用于把新提取的信息文件和
已经翻译过的信息文件融合起来,在此不再赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值