QT多国语言动态切换常见例子

QT多国语言需要用到三个工具:

l        Lupdate:生成ts文件

l        Linguist:翻译ts文件中的字符串

l        Lrelease:生成qm文件

 

这三个工具都是QT自带的工具,在相关的安装路径下。

 

1.    准备一个界面工程

新建工程命名为: cabagge_langsw, 使用设计师设计界面设计如下

 QT多国语言动态切换常见例子_第1张图片

设置下拉框内容的时候不用翻译,其他显示的字符串需要翻译

如果手工代码更新界面的内容,需要在字符串前面使用tr函数

 

 

2.  配置ts文件

  在.pro中添加

TRANSLATIONS= lang_en.ts \

              lang_zh.ts


 

 

需要支持多少种语言,则就添加多少个文件,每个文件对应一种语言的翻译

             

3.  生成.ts文件

工具->外部->Qt语言家->更新翻译,将生成翻译文件ts文件(lang_en.ts 和lang_zh.ts 

 QT多国语言动态切换常见例子_第2张图片QT多国语言动态切换常见例子_第3张图片

 

【注意】这一步一定要在编译完后再做,因为ui_xxx.h编译后才生成.

 

4. 使用linguist.exe翻译文件

   Linguist.exe在QT的安装路径下,

如我的是在:D:\DevSoft\Qt\Qt5.4.2\5.4\mingw491_32\bin

通过Linguist打开.ts文件,给每个需要翻译的字符添加对应的翻译语言

 QT多国语言动态切换常见例子_第4张图片

 

5. 发布生成qm文件

每个字符翻译完之后,需要转换为qm文件

QT多国语言动态切换常见例子_第5张图片

在当前路径下生成对应的qm文件。

每个ts文件都重复做上面两个步骤。

 

 

 

 

 

 

6. 添加代码:切换时更新翻译语言的版本

 QT多国语言动态切换常见例子_第6张图片

添加切换下拉框的变化的槽函数:

[cpp]  view plain  copy
  1. //下拉框的切换的槽函数  
  2. void Widget::on_comboBox_sw_currentIndexChanged(const QString &arg1)  
  3. {  
  4.   
  5.     //判断是哪一个语言  
  6.     QString lang = "zh.qm";  
  7.     if(arg1 == "English"){  
  8.         lang = "en.qm";  
  9.     }  
  10.   
  11.     //安装语言翻译器  
  12.     static QTranslator* translator = NULL;  
  13.     if (translator != NULL)  
  14.     {  
  15.         qApp->removeTranslator(translator);  
  16.         delete translator;  
  17.         translator = NULL;  
  18.     }  
  19.     translator = new QTranslator;  
  20.     QString qmFilename = "lang_" + lang;  
  21.     //这里用了绝对路径你要更改回来哦  
  22.     if (translator->load(  
  23.                 QString("G:/WorkingSpace/Qt/2016.3/cabagge_langsw/"  
  24.                         )+qmFilename))  
  25.     {  
  26.         bool fb = qApp->installTranslator(translator);  
  27.     }  
  28.   
  29. }  




7. 添加更新界面字符串的响应

调用installTranslator方法后,系统会自动给每个窗体发送信号并告知changeEvent槽event产生,在要切换语言的每个窗体中都要重写changeEvent这个方法,格式基本差不多:

 

[cpp]  view plain  copy
  1. void Widget::changeEvent(QEvent *e)  
  2. {  
  3.     QWidget::changeEvent(e);  
  4.     switch (e->type())  
  5.     {  
  6.        case QEvent::LanguageChange:  
  7.             ui->retranslateUi(this);  
  8.             //还有其他手工更新界面的内容  
  9.         break;  
  10.        default:  
  11.         break;  
  12.     }  
  13. }  

8. 效果图:

QT多国语言动态切换常见例子_第7张图片




你可能感兴趣的:(QT多国语言动态切换常见例子)