要使程序支持国际化.首先你得知道 QObject::tr() 的使用方法.还有就是 QString 内部是使用 unicode 编码的.
如果你还不知道上面说的两点有何意义.那么你必须先理解它们,然后再阅读下去.
1. 使用 findtr 工具得到你程序里需要翻译的地方.当然,这些地方都是你通过 tr() 自己设置的.
findtr *.cpp *.h > myApp.po
2. 拷贝一份 myApp.po .用文本编辑工具打开它.修改其中的编码设定.
在myApp.po中找到"Content-Type: text/plain; charset=iso-8859-1/n" 一行.
将charset=iso-8859-1修改为你要使用的字符集.比如我要修改成中文那么修改后,这一行变成这样:
"Content-Type: text/plain; charset=GB2312/n"
为了让其他人能够更加清晰的知道你本次翻译的语言.我将 myApp.po 文件改名为 myApp_cn.po.
3. 继续往下看 myApp_cn.po 文件.会出现如下信息:
#: globalpage.cpp:77
msgid "GlobalPage::Add"
msgstr ""
'#' 是注释标志. 后面的意思是这个翻译出现在原文件的哪里.
msgid 这行是说 GlobalPage类里有 "Add" 这样一个string使用了 tr()修饰.
msgstr "" 这里就是你翻译的地方了.比如我翻译成中文,最后的结果是这样的:
#: globalpage.cpp:77
msgid "GlobalPage::Add"
msgstr "添加"
如此翻译所有你使用 tr() 修饰过的string.
ps:这里有很多 .po 文件编辑工具可以使用.这些工具一定可以使用字典的.目前我没研究它们.
4. 翻译完所有string后,保存退出.然后使用 msg2qm 工具把 .po 文件制作成 .qm 的二进制文件.
msg2qm myApp_cn.po myApp_cn.qm
5. 让程序在显示客户文本时,使用翻译后的string.
你可以在 main.cpp 中添加如下代码:
#include <qtranslator.h>
int main(int argc, char **argv )
{
QApplication a( argc, argv );
QTranslator tror(0);
tror.load("myApp_cn.qm", ".");
a.installTranslator(&tror);
// ....
}
只需要注意 QTranslator::load() 函数的第1个参数.写对路径就OK了.(这里我把 myApp_cn.qm 文件和应用程序放在同级路径中)
就是这么简单.也许你还想在线改变语种.怎么办?我已经告诉你了.
如果你还不知道上面说的两点有何意义.那么你必须先理解它们,然后再阅读下去.
1. 使用 findtr 工具得到你程序里需要翻译的地方.当然,这些地方都是你通过 tr() 自己设置的.
findtr *.cpp *.h > myApp.po
2. 拷贝一份 myApp.po .用文本编辑工具打开它.修改其中的编码设定.
在myApp.po中找到"Content-Type: text/plain; charset=iso-8859-1/n" 一行.
将charset=iso-8859-1修改为你要使用的字符集.比如我要修改成中文那么修改后,这一行变成这样:
"Content-Type: text/plain; charset=GB2312/n"
为了让其他人能够更加清晰的知道你本次翻译的语言.我将 myApp.po 文件改名为 myApp_cn.po.
3. 继续往下看 myApp_cn.po 文件.会出现如下信息:
#: globalpage.cpp:77
msgid "GlobalPage::Add"
msgstr ""
'#' 是注释标志. 后面的意思是这个翻译出现在原文件的哪里.
msgid 这行是说 GlobalPage类里有 "Add" 这样一个string使用了 tr()修饰.
msgstr "" 这里就是你翻译的地方了.比如我翻译成中文,最后的结果是这样的:
#: globalpage.cpp:77
msgid "GlobalPage::Add"
msgstr "添加"
如此翻译所有你使用 tr() 修饰过的string.
ps:这里有很多 .po 文件编辑工具可以使用.这些工具一定可以使用字典的.目前我没研究它们.
4. 翻译完所有string后,保存退出.然后使用 msg2qm 工具把 .po 文件制作成 .qm 的二进制文件.
msg2qm myApp_cn.po myApp_cn.qm
5. 让程序在显示客户文本时,使用翻译后的string.
你可以在 main.cpp 中添加如下代码:
#include <qtranslator.h>
int main(int argc, char **argv )
{
QApplication a( argc, argv );
QTranslator tror(0);
tror.load("myApp_cn.qm", ".");
a.installTranslator(&tror);
// ....
}
只需要注意 QTranslator::load() 函数的第1个参数.写对路径就OK了.(这里我把 myApp_cn.qm 文件和应用程序放在同级路径中)
就是这么简单.也许你还想在线改变语种.怎么办?我已经告诉你了.