Qt 中英文切换
一、前言
软件面向不同国籍用户时,需要显示不同语言的操作界面,Qt提供语言家可翻译为不同语言类型,方便软件走向国际化。
二、功能实现
1、翻译文件制作
1)在pro文件中添加生成中英文翻译过渡文件(.ts文件)所需代码
注:res为存放生成ts文件的存放目录,需手动创建res目录,否则执行下面第3步时会报错
2)修改源代码继承changeEvent事件,在该事件内刷新字符串设置
1 void ZhEn_Test::changeEvent(QEvent *event) 2 { 3 if (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 4 int 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 13 return app.exec(); 14 }
2)编写继承QApplication的应用类,加载当前选择语言对应的资源文件
1 void Application::setLanguage(const QString& locale) 2 { 3 QTranslator * item = NULL; 4 5 //移除上次语言 6 while (m_Current.count()) 7 removeTranslator(m_Current.takeFirst()); 8 9 //安装新语言 10 m_Current = m_Translators.values(locale); 11 foreach(item, m_Current) 12 installTranslator(item); 13 }
4、运行效果
5、代码与二进制运行文件如下链接,可进行下载
链接:https://pan.baidu.com/s/12LnPQY80xw-axoa_QvaHyA,提取码:zhEn