Qt 多语言的实现方法

step1:创建工程

创建qt工程,编译工程后,在*.pro的工程文件中添加如下代码并保存:

        TRANSLATIONS += ldat_EN.ts \
                        ldat_CH.ts

step2:设置界面

在界面中添加按钮,并且设置按钮名称“中文”、“英文”,和窗口名称“主窗口”,保存并编译运行程序。

Qt 多语言的实现方法


step3:更新翻译

在菜单栏选择:工具-》选项-》qt语言家-》更新翻译,我们会看到有多少个字符被读取出来。

注意:如果这些按钮等的名称是通过代码设置的,则需要将字符通过tr("")括起来,如:ui->button_ch->setText(tr("中文"));


step4:多语言翻译

在这一步的主要是通过qt自带的Linguist工具(在qt安装目录下),解读翻译ts文件。如图所示:

Qt 多语言的实现方法



step5:发布

将生成的ts文件对应语言翻译完成之后,点击保存并且操作:文件->发布。在ts同级目录下生成翻译完成的对应的*.qm文件。如下图所示:

Qt 多语言的实现方法


step6:加载qm文件

先创建qt资源目录,将生成的qm文件添加进去。如图:

Qt 多语言的实现方法

添加代码,加载qm文件,添加代码如下:

Qt 多语言的实现方法

上图中箭头所示的代码为重写的父类的方法,起通知作用。


step 7:运行效果

点击“中文”按钮显示中文效果:

Qt 多语言的实现方法

点击“英文”按钮显示英文效果:

Qt 多语言的实现方法

给出几点注意:

1:由于语言的设置是动态加载的,如果待翻译的字符是写在构造函数中,即使通过tr("")翻译了,仍然是不能加载出来的,因为构造函数只调用一次。所以尽量不要将待翻译的字符信息写在构造函数中,如果必须,那么可以将对应的控件的类似setText()函数写在相应的中英文切换的响应函数中。

2:在做这个多语言的功能时,通过语言家的工具生成ts文件时,一定要先将工程编译运行,保证待翻译的字符全部被ts文件给寻找到。

3:在加载qm文件时,可以创建资源文件,将qm文件放在资源文件下(我把qm文件放在工程的目录下加载,发现不能使用qm,无法切换语言,所以我就通过资源文件的方式加载qm文件,大家有什么其他的方式加载qm文件,望不吝赐教,感谢!)

新增注意事项:

问题1:在多语言切换时,如果我们新增了控件,并且在代码中操作了控件的setText()等显示函数,发现切换语言后,控件的上的字符消失,不显示了?

解决办法:因为切换语言的功能时需要重写父类的changeEvent(QEvent *event)方法,此方法中有图片中红框的函数,此函数是为了重译UI,所以控件的操作放在这里面能解决问题,如图蓝框所示。

Qt 多语言的实现方法