1. 代码中所有需要翻译的字符串用 "tr(") 包含
2. 在 pro 文件中添加
TRANSLATIONS += resources/multiLang_zh.ts \
resources/multiLang_en.ts
3. 生成ts文件
1) 工程目录新建文件夹 resources
2) 执行 "工具/外部/QT语言家/更新翻译(lupdate)"
或者通过命令行执行 lupdate 命令
a. cmd 命令切换至 lupdate 目录下:D:\Qt\Qt5.12.10\5.12.10\mingw73_64\bin
b. 运行
lupdate -verbose E:\MyProjects\QtDemo\MultiLanguageDemo\MultiLanguageDemo.pro
c. 可在工程目录下 看到 resources 文件夹 及 multiLang_en.ts 和 multiLang_zh.ts
d. 编辑 multiLang_zh.ts 文件 将对应英文字符翻译为中文,如下所示
<message>
<location filename="../MainWnd.ui" line="66"/>
<source>OK</source>
<translation type="unfinished">确定</translation>
</message>
e. 编辑 multiLang_en.ts 文件 对应英文字符输入显示的英文,如下所示
<message>
<location filename="../MainWnd.ui" line="66"/>
<source>OK</source>
<translation>OK</translation>
</message>
以上两步(d/e) 可以使用 Qt Linguist 工具翻译应用程序的文本
4. 生成qm文件
执行 "工具/外部/QT语言家/发布翻译(lrelease)"
或者通过命令行执行 lrelease 命令
1) cmd 命令切换至 lupdate 目录下:D:\Qt\Qt5.12.10\5.12.10\mingw73_64\bin
2) 运行
lrelease -verbose E:\MyProjects\QtDemo\MultiLanguageDemo\MultiLanguageDemo.pro
3) 可在工程目录 resources 文件夹下看到 multiLang_en.qm 和 multiLang_zh.qm
5. 在项目工程中添加资源文件 resources 以及其目录下文件
multiLang_en.qm 和 multiLang_zh.qm
6. main 函数增加以下代码,运行显示中文界面
在 QApplication a(argc, argv); 后面添加
QTranslator translator;
translator.load(":/resources/multiLang_zh.qm");
a.installTranslator(&translator);
7. 动态切换语言
1) 定义变量 QTranslator trans
2) 选择语言 ComboBox 触发槽函数 void onIndexChanged()
connect(ui->comBoxLanguage, SIGNAL(currentIndexChanged(int)), this, SLOT(onIndexChanged()));
3) 在 槽函数 void onIndexChanged() 中添加以下内容
int nIndex = ui->comBoxLanguage->currentIndex();
if(nIndex == 0)
trans.load(":/resources/multiLang_zh.qm");
else
trans.load(":/resources/multiLang_en.qm");
qApp->installTranslator(&trans);
8. 重写 changeEvent
void SettingDlg::changeEvent(QEvent *event)
{
qDebug() << "changeEvent ... ";
switch (event->type())
{
case QEvent::LanguageChange:
translateUI();
break;
default:
QDialog::changeEvent(event);
}
}
void SettingDlg::translateUI()
{
this->setWindowTitle(tr("Setting dialog"));
ui->labTips->setText(tr("Please select language"));
ui->comBoxLanguage->setItemText(0, tr("Chinese"));
ui->comBoxLanguage->setItemText(1, tr("English"));
}
多个界面,每个界面都要重写 changeEvent
9. 执行 "工具/外部/QT语言家/更新翻译(lupdate)",,并重新翻译 ts 文件中的字符串,
(即重复第3步中 d 和 e 两步)
10. 执行 "工具/外部/QT语言家/发布翻译(lrelease)"
11. 编译运行即可