【qt编程】qt编程 多语言版本发布 +vs

在 main函数中使用 installTranslator,即可让程序在启动时自动判断语言环境,加载相应语言。

至此,静态语言切换已经完成,下面要做的是动态切换(即不需要重启软件)。

基本步骤:

参考:qt 语言家的使用https://www.cnblogs.com/mzy-google/p/5162118.html

参考教程1:Qt翻译文件结合VS实现语言切换(多语言国际化)https://blog.csdn.net/u012043391/article/details/76684727

参考教程2:在使用Qt5.8完成程序动态语言切换时遇到的问题

一般步骤:

1、创建新的.ts文件

(1)在vs中的工程右键——Creat new translation File

(2)选择要创建的翻译文件,即完成.ts文件的创建

2、lupdate .ts文件即可获取需要翻译的文本,格式如下:

    <message>
        <location filename="guiforuser.cpp" line="1125"/>
        <location filename="guiforuser.cpp" line="1126"/>
        <source>上颌牙可见与否</source>
        <translation type="unfinished">Upper visible or not</translation>

    </message>

source:保存源字符文本,translation 中放入自己的翻译

几个问题:

(1)如何自动识别程序中的文本,需要在qstring前加tr(),才会自动更新在.ts文件中

(2).ts文件乱码问题:vs的字符集要与.ts字符集一致,一般vs中自动生成的.ts字符集为utf-8,那么也需要将相关的源文件字符集设置为utf-8:

设置方式为:选中相应文件——File——Advanced Save Options(高级保存选项)——带符号utf-8(据有些教程说带符号的编码更不容易出错),这里注意需要选中相应源文件(.cpp,.h等),否则找不到这个选项,如下所示:

这里注意每个源文件要单独设置(我没有找到同一设置的方法),否则设置一个对其他源文件无效,可能还是有乱码问题。

编码一致后,就没有乱码的问题了

(3)翻译文本的写入:a\可以直接用文本方式打开.ts文件直接在相应位置写入,b\也可以用Qt Linguist打开进行编辑

3、lrelease,生成.qm文件后加载即可

(1).qm文件的加载代码如下所示:

 

  1. QTranslator* translator = NULL;  
  2. //qm文件的加载:  
  3. translator = new QTranslator;  
  4. if (translator->load("test_zh.qm"))  
  5.         qApp->installTranslator(translator);  
  6.     }  
  7.     ui.retranslateUi(this); 

(2).qm文件的删除

 

  1. //qm文件的删除:  
  2. QTranslator* translator = NULL;   
  3. translator = new QTranslator;  
  4. if (translator->load("test_zh.qm"))  
  5. if (translator != NULL)  
  6.     {  
  7.         qApp->removeTranslator(translator);  
  8.         delete translator;  
  9.         translator = NULL;  
  10.     }  
  11. ui.retranslateUi(this);  

(3)注意:如果源文件语言为中文,加载.qm文件,设置为英文后,想要换为中文的两种方式:

a\创建一个中文的qm文件后加载

b\删除加载的英文文件,但是删除时需要注意translator要是同一个,将其设为类的私有变量,需要删除时删除,否则,重新定义一个变量,加载同一个.qm文件,也删除不成功(原因??)

 

几个问题:

1、动态切换与静态切换问题

参考:qt多国语言及其动态切换的学习笔记 https://blog.csdn.net/prompty/article/details/51442130

(1)静态切换:

在main函数中写上加载翻译文件语句(在设计文件中也可以,但是要比与ui设计相关的语句先运行)

 

  1. QTranslator *translator = new QTranslator;
  2. if (translator->load("E:/GuiForUser/GuiForUser/guiforuser_en.qm"))
  3. {
  4.   qApp->installTranslator(translator);

(2)动态切换的问题:

在动态切换中,纯代码设计的语句,比如settext语句,加载翻译文件切换语言之后,settext设计的ui并没有改变,需要重写函数,再加载一次。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章