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

标签: QT 国际化
14人阅读 评论(0) 收藏 举报
分类:

   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文件中没有包含context中sourceText的翻译,这个函数返回一个和sourceText相等的QString。sourceText的编码方式由encoding指定,它默认为DefaultCodec。


示例

    在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"))  
<span style="white-space:pre;"> </span>{  
        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配置选项即可

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

查看评论

Qt实现多国语言(即界面翻译)可实时进行切换

新建一个Qt Widgets Application的工程, 然后在UI界面上放置QLabel以及一个按钮 最终要实现点击按钮,实现QLabel上的文字进行中英切换 大致步骤: 1.由...
  • sinat_35523212
  • sinat_35523212
  • 2016-08-28 23:23:15
  • 5333

Qt国际化多国语言和发布例子

一  Qt Widgets Application类型工程 1. 创建Qt Widgets Application工程hello_i18n 2. 编辑pro工程文件,新增代码 TRANSLAT...
  • happyrabbit456
  • happyrabbit456
  • 2016-06-20 17:40:20
  • 1627

Qt国际化 动态语言切换 多窗口翻译

  • 2012年09月04日 17:26
  • 30KB
  • 下载

qt多国语言及其动态切换的学习笔记

经过了几天的努力,从一开始的只能系统静态修改语言,到一层界面的修改,后来再到多层界面的动态切换,在此记录一下过程 1. 编写代码的时候的注意事项 首先在建立UI的时候尽量用英文的名字,虽然后来我的...
  • prompty
  • prompty
  • 2016-05-18 10:53:47
  • 2733

Qt5多国语言国际化

一.国际化的支持的实现:(1)使用QString对象表示所有用户可见的文本。由于QString内部使用Unicode编码实现,所以它可以用于表示所有需要向用户呈现的文本。当然,对于仅程序员可见的文本并...
  • hejun_haitao
  • hejun_haitao
  • 2015-11-07 19:58:38
  • 1716

Qt国际化——多语言翻译时值得注意的一个编程问题

问题:          在用Qt开发的项目中,可以很轻松的实现多语言切换的功能,即国际化。关于这方面的资料网上不少,我这里不谈这个问题,而是记录一个在实际编程中值得注意的一个实践问题。       ...
  • e5Max
  • e5Max
  • 2015-01-28 21:49:20
  • 2146

Qt之动态语言切换

Qt之动态语言切换 QT GUI提供了语言动态转换的机制并辅以相应的工具实现界面的多语言实时动态切换功能。 一、         语言切换的实质 当界面上有一个地方需要显示字符串strA时,在代...
  • wuff1988
  • wuff1988
  • 2011-12-21 22:28:19
  • 7170

Vue实现国际化多语言开发

Vue是现如今比较流行的前端开发框架,具体怎么使用本文就不多介绍了,现在主要分享下自己在开发中所用到的国际化多语言开发,环境使用vue2.0,vue-i18n,vue-resource。引入必要插件i...
  • zjmjiang
  • zjmjiang
  • 2017-03-01 11:10:52
  • 5690

【大话QT之十四】QT实现多语言切换

QT制作多语言包,实现多语言切换。
  • houqingdong2012
  • houqingdong2012
  • 2014-07-18 20:10:17
  • 9662

<学习笔记> jQuery 国际化多语言

jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化 资源文件命名有以下三种格式: basename.properties ba...
  • Mars_Jiang
  • Mars_Jiang
  • 2015-12-22 11:25:32
  • 3035
    个人资料
    持之以恒
    等级:
    访问量: 5万+
    积分: 6550
    排名: 4566
    文章存档
    最新评论