Qt中英文切换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Qt中英⽂切换
⼀、前⾔
软件⾯向不同国籍⽤户时,需要显⽰不同语⾔的操作界⾯,Qt提供语⾔家可翻译为不同语⾔类型,⽅便软件⾛向国际化。
⼆、功能实现
1、翻译⽂件制作
1)在pro⽂件中添加⽣成中英⽂翻译过渡⽂件(.ts⽂件)所需代码
注:res为存放⽣成ts⽂件的存放⽬录,需⼿动创建res⽬录,否则执⾏下⾯第3步时会报错
2)修改源代码继承changeEvent事件,在该事件内刷新字符串设置
1void ZhEn_Test::changeEvent(QEvent *event)
2 {
3if (event->type() == QEvent::LanguageChange)
4 {
5//带参数情况
6 m_InfoQlb->setText(QObject::tr("The %1 language switch.").arg(m_Count));
7
8//不带参数情况
9 setWindowTitle(QObject::tr("Qt Linguist"));
10 m_EnRadioButton->setText(QObject::tr("English"));
11 m_VieRadioButton->setText(QObject::tr("Vietnamese"));
12 m_ZhRadioButton->setText(QObject::tr("Simplified Chinese"));
13
14//同⼀字符串需翻译为不同含义情况
15 m_Back1Qpb->setText(tr("Back"));
16 m_Back2Qpb->setText(QObject::tr("Back"));
17 m_Back3Qpb->setText(QObject::tr("Back", "Test"));
18 }
19 QWidget::changeEvent(event);
20 }
刷新字符串
3)打开Qt⾃带的命令⾏窗体
3)切换到源代码存放⽬录,并执⾏"lupdate ⼯程pro⽂件"⽣成ts⽂件
4)如在⼯程本地未创建res⽬录,则会报如下错误
5)如正确创建res⽬录后,再次执⾏lupdate指令⽣成ts⽂件
6)在res⽬录下,查看⽣成的ts⽂件
7)打开Qt语⾔家
8)打开需要翻译的ts⽂件,先选择lang_zh_CN.ts
注:程序默认设置英⽂字符串,可不⽤操作lang_en_US.ts⽂件
9)对需要翻译的内容增加汉语翻译,并保存
注:选择上下⽂中的“ZHEN_Test”,还可查看到⼀个“Back”,此时是因为代码中使⽤的是tr包含字符串,默认分类到类名列表中
如果不需要将三个“Back”翻译为不同意思,可使⽤QObject::tr包含字符串,节约翻译⼯作量与减⼩翻译⽂件⼤⼩ 10)同样打开lang_vie_HE.ts,翻译英⽂为越南语,并保存
11)在刚才Qt命令窗体中,执⾏”lrelease ⼯程pro⽂件“,⽣成各qm⽂件
12)到此翻译⽂件制作完成,如下*.qm⽂件
2、翻译⽂件包含进⼯程
1)新建⼀个⽂本⽂件,名称修改为language.qrc,添加内容如下
1 <RCC>
2 <qresource prefix="" >
3 <file>res/lang_en_US.qm</file>
4 <file>res/lang_zh_CN.qm</file>
5 <file>res/lang_vie_HE.qm</file>
6 </qresource>
7 </RCC>
2)⼯程pro⽂件中添加翻译资源⽂件
3、加载资源⽂件
1)软件启动时,加载资源中的所有qm⽂件到内存
1 #include "ZhEn_Test.h"
2 #include "application.h"
3
4int main(int argc, char *argv[])
5 {
6 Application app(argc, argv);
7//加载所有qm资源⽂件到内存
8 app.loadTranslations(":/res");
9
10 ZhEn_Test w;
11 w.show();
12
13return app.exec();
14 }
加载资源⽂件到内存
2)编写继承QApplication的应⽤类,加载当前选择语⾔对应的资源⽂件
1void Application::setLanguage(const QString& locale)
2 {
3 QTranslator * item = NULL;
4
5//移除上次语⾔
6while (m_Current.count())
7 removeTranslator(m_Current.takeFirst());
8
9//安装新语⾔
10 m_Current = m_Translators.values(locale);
11foreach(item, m_Current)
12 installTranslator(item);
13 }
设置当前语⾔
4、运⾏效果
5、代码与⼆进制运⾏⽂件如下链接,可进⾏下载。