初学Qt:国际化解决中文乱码以及生成多语言版本的软件

转载 2017年11月13日 21:38:01

原文地址:
https://jingyan.baidu.com/article/4ae03de3edd0da3eff9e6bf6.html
PS:对于VS2010如果是第一次打开.ts文件,是不无法双击直接打开的,应该右击选择打开方式>>添加>>Qt本地文件夹>>bin>>linguist.exe,选择并设为默认,以后即可直接打开。
一、建立英文界面演示程序

  1. 1

    首先我们来建立一个英文界面的应用程序,程序只是具有英文界面,不含其他任何功能。

    程序以学生信息为例,界面中的文本框仅作演示,其他没有任何作用。建立项目时窗体的类名是MyMainWindow,基类是QWidget。

    界面上的各个label的内容都是要翻译的。

    界面如下:

    怎样国际化Qt应用程序
  2. 2

    我们在编辑界面的时候要注意一个地方。实际上对于窗体标题、标签内容以及按钮的内容是一样的,你在编辑时系统也是默认的。但是我们需要知道这个东西。这就是windowTitle、label的text以及PushButton的text,属性下面有个“可翻译的”复选框,默认是选中的,保持默认即可。

    怎样国际化Qt应用程序
    怎样国际化Qt应用程序
  3. 3

    我们还要在窗体类的构造函数中添加一行代码,用于动态的在按钮上面的那个Label中显示一些内容。

    ui->label_8->setText(tr(“This is just a demo app”));

    然后,我们来运行下程序看看。

    全英文的界面,包括窗口标题。

    #################################################

    #特别注意:代码中所有需要翻译的字符串,都必须用tr函数阔起来。#

    #################################################

    怎样国际化Qt应用程序

二、生成翻译源文件(Translation source)

  1. 1

    打开Qt配置好的命令提示符,并切换到项目目录。

    怎样国际化Qt应用程序
  2. 2

    输入命令:lupdate Trans_demo.pro -ts transsrc.ts

    然后可以看到在项目目录下生成了一个ts的文件。

    怎样国际化Qt应用程序
  3. 3

    我们用记事本打开该文件看看。

    可以发现,生成的其实就是一个xml文件。

    怎样国际化Qt应用程序

    三、使用Linguist进行翻译
    1. 1

      对ts文件的翻译当然不是在文本文档中,是使用Qt提供的工具Linguist。好了,我们打开Linguist看看。

      然后在Linguist中打开我们刚才生成的transsrc.ts文件。在弹出的设置对话框的源语言中我们选择English。然后确定即可。

      我们可以看到打开翻译源文件的Linguist的样子,整个程序包括  上下文 窗口,字符串 窗口,短语和表单  窗口,翻译窗口 ,短语和猜测 窗口以及警告 窗口。

      上下文窗口会包括我们所有有需要翻译内容的类的名字,不一定是只是窗口类,也可以包括我们自定义的类。但是自定义类的字符串翻译与窗口类字符串的翻译处理上有所差别,这里我们不进行探讨。上下文窗口的项那一列,显示了该上下文需要翻译的字符串数量以及已经翻译完成的数量。字符串窗口列出的是当前选择的上下文中的所有需要翻译的字符串。短语和表单窗口会根据你选择的字符串的位置,显示窗口或先关的代码。翻译窗口就是对字符串进行翻译的地方。短语和猜测窗口是根据你已经翻译的内容,对相同的字符串进行翻译猜测。警告窗口显示警告信息。

      这里我们来看看短语和表单窗口。

      我们可以看到,随着我们选择的字符串的变化,短语和表单 窗口也在变。

      怎样国际化Qt应用程序
      怎样国际化Qt应用程序
    2. 5

      好的,我们开始翻译。点击字符串窗口的  StudentInfomation 字符串。然后在翻译窗口进行翻译。

      在翻译完成一个字符串后,不是直接点击下一个字符串就可以的,我们需要点击工具栏上的那个绿色勾号按钮才行。

      在点击绿勾前,我们可以看到StudentInfomation钱的问号由蓝色变为了黄色。意思是,字符串我们已经翻译完成,并且通过了Qt的验证测试,只是没有确认接受。

      好的,点击绿勾。

      然后,可以看到StudentInfomation前的黄色问号变为了绿色勾,上下文窗口中的项变为了1/11。字符串窗口自动定位到了下一个字符串,翻译窗口也定位到了下一字符串。

      按照第六步的做法,我们将其他的字符串全部翻译。

      图片中可以看到Work的前面不是一个绿色的勾,而是一个黄色的。意思是,翻译者已经接受确定了这个翻译,但是该翻译未完全通过Qt的验证测试。这是因为我少打了那个:号。只需要在翻译中加上这个:号即可。即使不加也没有影响,不过我还是给加上了。

      所有翻译完毕后,也就是所有的问号都变成了绿勾后。我们就可以生成程序可用的文件了。

      点击  文件-发布,可以看到项目目录下生成了一个transsrc.qm文件,这是一个二进制的文件。

      好了,到此时我们的翻译工作顺利完成。

      怎样国际化Qt应用程序
      四、语言转换的实现
      1. 1

        在软件中要实现不同语言的转换,只需要使用QTranslator类即可。

        我们首先将transsrc.qm改名为language_zh.qm,然后将其拷贝与可执行文件放置在同一目录。这里我放置在debug目录下。

        好的,先在main函数中添加如下代码:QTranslator trans;

         if(trans.load(“../language_zh.qm”))

            a.installTranslator(&trans);

        注意别忘了#include <QTranslator>

        然后运行看看效果。

        可以看到界面已经全部变成了中文。

        但是要注意:trans的创建,必须得在主窗口对象之前。

        上面的代码是在main函数中进行转换的,但是如何能够实现即时转换呢。

        我们先将main中的代码注释掉。然后进入按钮Switch to chinese的槽函数中。

        输入以下代码:QTranslator trans;    

        if(trans.load(qApp->applicationDirPath()+”/language_zh.qm”)) 

               qApp->installTranslator(&trans); 

        ui->retranslateUi(this);

        只是比上面的多了一行代码。

        我们来运行看看。我运行了两次,对比下点击按钮前后有什么不同。

        是的,动态显示的内容并没有被翻译显示在界面上面。

        那么这是为什么呢?问题在retranslateUi这个函数上。这个函数在Assistant中找不到,但是它却可以在你的编译目录下的用户界面编译后的代码中找到,我的是在ui_mymainwindow.h中。它只是实现了界面的重新翻译。但是我们的动态显示的内容是在窗体的构造函数中,重新翻译并不会重新构建窗体,所以内容不会被显示。

        好了,到此为止我们的问题已经解决。要想长久保证语言的转换,需要我们将相关设置保存在外部文件,否则软件重新运行肯定还会还原为英文。这样第一种方法可以实现软件的重启更改显示语言。

linguist 乱码问题 : Qt国际化(源码含中文时)的点滴分析

文章来源:http://blog.csdn.net/dbzhang800/article/details/6334852
  • libaineu2004
  • libaineu2004
  • 2014-09-03 16:30:32
  • 3802

QT中文乱码与国际化支持

QT国际化支持    Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性。Qt本身提供的linguist工具,用来实现翻译过程十分方便。MFC中利用资源DLL切换资源,...
  • alicehyxx
  • alicehyxx
  • 2009-12-08 00:38:00
  • 10762

Qt国际化详细介绍,中文乱码以及解决方案

介绍Qt国际化的文章不少,但是真正详细介绍的不多。鄙人专门学习了一下Qt的国际化,在此做一点分享。欢迎大家拍砖。 Qt国际化的一般步骤 运行 lupdate,从应用程序的代码中提取所有界面...
  • xiao69
  • xiao69
  • 2014-02-18 01:12:11
  • 4417

Qt+VS2010中英文切换

界面先简单只有两按钮,分别控制英转中和中转英。 先说步骤: 1、用英文做界面。 2、在工程上右键,点击"Create new Transltion File ",会在工程目录生成一个...
  • houxiaoliwang
  • houxiaoliwang
  • 2017-08-16 18:17:14
  • 569

使用Qt Visual Studio Add-in 实现中文ts文件,解决中文乱码问题

本文只是描述Qt Visual Studio Add-in 在创建或者更新中文ts文件的时候,如何保证中文不乱码,当然其他的文件编码也适用此规则。 例子: 问题1:我们要生成中文的ts文件...
  • n567656756765676567
  • n567656756765676567
  • 2011-12-22 01:21:38
  • 2480

Qt动态多语言的实现

Qt对于多语言提供了QTranslator的接口,只要在程序启动时进行安装,然后动态改变QTranslator的加载即可。下面是效果图(英文/简体/繁体)。 选择不同的语言,界面会随...
  • caoshangpa
  • caoshangpa
  • 2017-11-21 19:36:51
  • 110

QT中文乱码与国际化支持

QT国际化支持     Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性。Qt本身提供的linguist工具,用来实现翻译过程十分方便。MFC中利用资源DLL切换资...
  • mybelief321
  • mybelief321
  • 2013-07-02 16:25:44
  • 1142

初学Qt:国际化解决中文乱码以及生成多语言版本的软件

原文地址: https://jingyan.baidu.com/article/4ae03de3edd0da3eff9e6bf6.html PS:对于VS2010如果是第一次打开.ts文件,是不无...
  • dashumak
  • dashumak
  • 2017-11-13 21:38:01
  • 200

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

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

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

Qt多语言国际化主要体现在界面的语言切换,语言切换的主体,即界面中需要翻译的元素,要放在“QApplication::translate()”函数内,或更方便一些的“QObject::tr()”、“Q...
  • u012043391
  • u012043391
  • 2017-08-04 14:50:37
  • 1323
收藏助手
不良信息举报
您举报文章:初学Qt:国际化解决中文乱码以及生成多语言版本的软件
举报原因:
原因补充:

(最多只允许输入30个字)