需求:使用Qt + C++的项目支持中/英文界面
Qt:QTranslator类
头文件:#include <qtranslator.h>
要翻译的语句都要加上tr("待翻译的内容")
不属于Qt部分的类需要继承QObject后使用tr();
class CGlobalVariant : QObject
{
Q_OBJECT
}
生成ts文件
网上找到生成ts文件的一种方法是使用Qt VS Tools中的create translator file,但是我这里版本没有,只能通过新建项目中的create translator file
选择语言生成.ts文件
ts文件生成后有遇到了新的问题,使用linguist打不开ts文件,提示内容empty,无论怎么lupdate都不行,后来想通过qt工具来实现成功
生成.pro文件后,通过这个文件打开Qt Creator
外部-Qt预言家-更新lupdate
再通过vs打开linguist,加载ts文件就可以看到所有待翻译的内容了
完成翻译编辑后发布全部生成qm文件
加载qm文件
QTranslator *myLanguage = new QTranslator(qApp); /// 创建翻译器
QString qscurpath = QCoreApplication::applicationDirPath();
if (index == 0)
{
qscurpath = qscurpath + "/Translation_zh.qm"; /// 加载qm文件
}
else if (index == 1)
{
qscurpath = qscurpath + "/Translation_en.qm";
}
myLanguage->load(qscurpath); /// 加载语言包
qApp->installTranslator(myLanguage); /// 软件加载翻译器
ui.retranslateUi(this); ///翻译
加载了翻译器后,在需要翻译的类内,执行ui.retranslateUi(this); 即可翻译当前类包含的所有控件和类内tr语句
需要注意的是retranslateUi实际上是翻译语句后重新调用了setText(),理论上翻译完成后,再次调用setText方法会按照实际本次的文本内容进行设置,所以可能会破坏翻译效果,所以调用翻译的时机应该是控件加载显示之前