qt-02-国际化软件文本

来源:互联网 发布:java 数组 属于 那个类 编辑:程序博客网 时间:2024/05/16 10:43

以前没怎么研究国际化的问题,因为根本用不到。

目前发现如果软件要跨国使用,确实要考虑的。

基本教程:

0>. 所有代码的字符串都应该使用  tr()或者translate()函数 包裹起来。tr()函数tr()中不要有变量对于变量使用 "%1".arg()方式扩展对于静态字符串:可以使用 x = QT_TR_NOOP("我是字符串")宏标记,然后赋值给 tr(x)translate()函数同样的使用问题对于静态字符串可以使用 QT_TRANSLATE_NOOP包裹禁止 const char* 赋值给 QString在头文件定义宏QT_NO_CAST_FROM_ASCII 即可或者在 .pro文件定义 DEFINES += QT_NO_CAST_FROM_ASCII对于字符串可以用两种方法包裹tr()支持翻译QLantin1String()不支持翻译1>.生成翻译文件给 qtbasic.pro 配置选项:TRANSLATIONS = qtbasic.ts  qtbasic_chinese.ts生成文件:lupdate.exe qtbasic.pro然后看到输出文件qtbasic.ts  qtbasic_chinese.ts注:默认Qt\4.8.7\translations文件夹下面就有很多 翻译文件2>. 配置翻译内容运行翻译器:linguist.exe 配置翻译内容:每一项配好, 打钩表示OK生成二进制:linguist的  "发布..." 菜单或者运行 lrelease.exe *.ts3>.代码运行set_default_translation("qtbasic_chinese.ts")


我目前实现了 set_default_translation 代码如下:

QTranslator& get_default_translator(){static QTranslator* appTranslator = 0;if(!appTranslator){appTranslator = new QTranslator();qApp->installTranslator( appTranslator );}return *appTranslator;}bool set_default_translation(const QString& filename){return get_default_translator().load(filename);}


widget中响应事件的代码:

void qtbasic::on_actionEnglish_triggered(){qtutils::set_default_translation("translations/qtbasic.qm");this->retranslateUi(this);}void qtbasic::on_actionChinese_triggered(){qtutils::set_default_translation("translations/qtbasic_chinese.qm");this->retranslateUi(this);}


测试效果:






看来这个效果翻译效果不错







0 0
原创粉丝点击