Qt翻译文件结合VS实现语言切换(多语言国际化)

18 篇文章 4 订阅

  Qt多语言国际化主要体现在界面的语言切换,语言切换的主体,即界面中需要翻译的元素,要放在“QApplication::translate()”函数内,或更方便一些的“QObject::tr()”、“QObject::trUtf8()”函数;确定了翻译的主体后,就要对这些待翻译元素进行翻译,完成翻译后会生成qm文件;当界面要切换语言时,只需要加载qm文件即可。

  翻译的过程主要分三步:

1.  lupdate:提取待翻译元素,生成ts中间文件

2.  写翻译内容:将ts文件中所有提取出来的待翻译元素进行翻译

3.  lrelease:将翻译好的文件生成qm文件

 

  简要说明QApplication::translate()参数:

QString QApplication::translate ( const char * context, const char * sourceText, const char * comment = 0, Encoding encoding = DefaultCodec ) const

作用:通过查询qm文件,返回sourceText的翻译文本(当安装了多个qm文件时,查询顺序类似于栈的先进后出存储模式:即先搜索最近安装的qm文件,再搜索之前安装的qm文件)

参数说明:

(1)  context通常是一个类名(例如,“MyDialog”;

(2)  sourceText待翻译文本内容;

(3)  comment是消除歧义的注释,当相同的sourceText在同样的上下文情况下被用在不同的规则中默认情况下是零;

(4)  encoding表明字符串编码方式。

返回值:如果qm文件中没有包含contextsourceText的翻译,这个函数返回一个和sourceText相等的QStringsourceText的编码方式由encoding指定,它默认为DefaultCodec

应用:

QApplication::translate("Widget", "\346\227\213\350\275\254\346\270\270\346\210\217", 0, QApplication::UnicodeUTF8)


接下来看一个例子(VS+Qt):

  VS中新建一个QtGUI工程,通过Qt Designer选择摆放控件,修改text显示内容,编译工程,可以在ui_xxxx.h(根据ui文件自动生成)中看到放在QApplication::translate()中的待翻译元素:

pushButton_1->setText(QApplication::translate("TestClass", "Chinese", Q_NULLPTR));
pushButton_2->setText(QApplication::translate("TestClass", "English", Q_NULLPTR));

接下来生成ts文件:

  工程右键->“Create new Translation File”->选择你想生成的语言,比如demo中原始控件text为英文,要翻译成中文,那么Language就选择“中文(简体,中国)”


  此时工程目录下会多一项Translation Files,里面有*.ts文件,当代码中又增加了新的待翻译元素时,右键这个ts文件->lupdate,即可将新增加的待翻译元素更新到ts文件中

  接下来用Qt Linguist打开ts文件,将待翻译元素依次翻译后保存即可,或者可以直接使用文本编辑器打开ts文件,每一个<message>标签内为一个待翻译元素,将翻译写到<translation>标签中保存,Qt Linguist和文本编辑器都可以完成翻译的操作,在已经翻译完成的ts文件上右键->Irelease,即可生成*.qm文件

  生成了qm文件后,就可以在程序中需要实现翻译的位置加载该qm文件进行语言切换了:

QTranslator* translator = NULL;
//qm文件的加载:
translator = new QTranslator;
if (translator->load("test_zh.qm"))
	{
		qApp->installTranslator(translator);
	}
	ui.retranslateUi(this);
//qm文件的删除:
if (translator != NULL)
	{
		qApp->removeTranslator(translator);
		delete translator;
		translator = NULL;
	}
ui.retranslateUi(this);


效果如下:



  上图中的demo可以在VS2015+Qt5.8.0环境下直接编译运行,如果开发平台版本不同,改一下项目属性和Qt配置选项即可demo下载传送点)。


  注:Qt只能翻译字符串,不能翻译变量,即不存在tr(str),至于原因,就是你都不确定你要翻译的是什么(变量),Qt linguist也就自然不知道为你提取出什么来。。




  
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt实现国际化和多语言切换需要以下步骤: 1. 在Qt项目中创建一个“ts”文件,用于存储翻译后的资源。可以使用Qt自带的工具“Qt Linguist”来创建和编辑这些文件。 2. 在Qt项目中使用Qt翻译API来翻译界面元素。例如,使用tr()函数来标记需要翻译的字符串。 3. 使用lupdate工具来生成一个“.ts”文件,其中包含需要翻译的所有字符串。 4. 使用Qt Linguist编辑器来翻译这些字符串,并将它们保存到“.ts”文件中。 5. 使用lrelease工具来生成一个二进制的翻译文件“qm”文件,其中包含翻译后的资源。 6. 在Qt项目中加载这些翻译文件,并在运行时切换语言。 下面是一个简单的示例代码,演示如何在Qt实现语言切换: ```cpp #include <QApplication> #include <QTranslator> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 加载翻译文件 QTranslator translator; translator.load("myapp_zh.qm"); app.installTranslator(&translator); // 设置界面元素的翻译 QLabel label(tr("Hello World!")); label.show(); return app.exec(); } ``` 在上面的例子中,我们使用了QTranslator类来加载翻译文件,并使用installTranslator()函数将其安装到应用程序中。我们还使用了tr()函数来标记需要翻译的字符串。 当应用程序启动时,它将自动加载当前系统语言对应的翻译文件。如果用户切换语言,我们只需要重新加载对应的翻译文件即可。 希望这可以帮助你实现Qt中的国际化和多语言切换
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值