使用qtranslator遇到的坑

需求:使用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方法会按照实际本次的文本内容进行设置,所以可能会破坏翻译效果,所以调用翻译的时机应该是控件加载显示之前

posted @ 2024-05-29 20:25  小徐的小菜园  阅读(1775)  评论(0)    收藏  举报