Ⅰ.2.9.如何测试支持国际化的Qt AUT

原创 2015年11月20日 10:17:59

Qt 支持创建国际化的应用程序。意思就是,举个例子,开发者可以创建一个Qt应用程序,在使用英语语言的地方(如U.S)该程序可以在menu选项和对话框标签上展示English文本,在用德语的地方显示German,以此类推。

如果Squish 使用了AUT对象属性——包括它们用来识别对象的文本来识别对象,当谈到这种测试的时候,国际化的AUT可能会引起问题。因此,举个例子,File 菜单项将会有下一个英语语言环境下的‘File’,法语语言环境下的‘Fichier’。如果使用英语为AUT记录测试脚本,该测试脚本将不能在西班牙语环境下进行回放,因为当AUT的文本都是西班牙语的时候,Squish将会寻找使用了英语文本的对象。

Squish提供了三种处理国际化的问题的方法。

2.9.1 自动转换翻译

尽管有一个重要的限制,但这个是最简单的处理国际化AUT的方法。

应该使用与开发AUT所用的相同的语言来创建(如,记录)一个国际化的AUT的测试。例如,如果AUT是在U.S中用English开发的,应该用English创建测试。原始的English文本存储在AUT中,并且可以访问,即使AUT运行在不同的语言黄精中,比如Swedish中,menu选项和对话框标签显示Swedish文本。

我们可以告诉Squish使用AUT的原始(如,English)文本,甚至在不同的语言环境(如,Swedish)中也可以让Squish使用AUT的原始文本,可以通过设置SQUISH_TRANSLATION_AWARE_LOOPUP环境变量为1实现。

在一些情况下,相同的文本根据上下文需要有不同的翻译。为了支持这个功能,Qt的国际化函数QObject.tr 允许第二个字串用于消除歧义。不幸的是,不像原始文本,消除歧义的文本没有存储在AUT中,因此Squish不能区别到底该使用哪个用于消除歧义的文本。避免这个问题的唯一的方法就是不使用消除歧义的文本或者使用其他的方法来测试显示文本的国际化AUT。

2.9.2 使用对象名字而非文本

解决这个问题的最容易的方法是AUT的开发者给AUT的对象起一个唯一的名字,可以通过Qt的QObject.setObjectName 方法来创建这个名字。该方法的文本用什么语言是没有关系的,因为文本没有被翻译,所以不管AUT运行于什么样的语言环境下文本仍然是相同的。下面是一个AUT的开发者如何实现这个功能的示例:

fileMenu = new QMenu(tr("File"));//text will be translated
fileMenu.setObjectName(file_menu_mainwindow);//text won't be translated

不幸的是,问题仍未解决,即使当给Qt对象赋一个显式的名字时,Squish会继续使用它们的text属性。解决这个问题的一个方法是从Squish对象名字中移除所有的属性,除了type 和 name 属性(name属性是对应于Qt 对象的name 属性的Squish的name)。一个更方便的解决方法是控制Squish如何产生对象名字,因此它将会自动的为拥有非空Qt 对象名字的AUT对象使用type 和name属性,而为那些Qt对象名字为空的属性使用Squish的标准方法。

2.9.3 以编程方式翻译对象名字

另一种处理国际化AUT的方法是自动的按需创建具体区域对象map,自动地加载区域相关的对象map代替默认的对象map。

一种实现上述功能的方法是写下一个测试脚本函数(可能以全局脚本的形式存储的),该脚本读取原始对象map(该map使用,描述English 文本),然后使用当前地区的语言(例如,Finnish)写出一个新的对象map,然后加载新创建的对象map。

不幸的是,翻译对象map还是不够的,因为‘items’的文本可能不在对象map中。对于这些情况,我们需要使用我们自定义的翻译函数,并将它应用于相关的文本。例如,给出的已记录一行:

activateItem(waitForObjectItem(":File_QMenu", "Quit"))
我们需要将它改成这样:

activateItem(waitForObjectItem(":File_QMenu", i18n("Quit")))
假设我们自定义的翻译函数叫i18n。





版权声明:本文为博主原创文章,未经博主允许不得转载。

QT5(10)语言国际化 动态修改

一、注意内容1、国际化过程字符串需要使用unicode,Qt默认是unicode格式。而且可以使用QString对象来表示文本。 2、对于需要翻译的文本,需要使用QObject::tr(“1111”...
  • qq_16234613
  • qq_16234613
  • 2016年12月22日 11:04
  • 1234

QT实现多国语言的动态切换

摘要:本文论述了如何使用QT实现程序的多语系支持以及多语系的动态切换。 前沿 我们生活中用到的程序大多都是支持单一语言的,比如在中国我们用到的软件大多是汉语的,也有很少部分使用的是英语的,但是很少...
  • wang_hu_feng
  • wang_hu_feng
  • 2014年09月29日 21:09
  • 2380

javaweb简单实现国际化信息输出(参考)

 使用spring自带的功能实现信息国际化输出,需要导入spring.jar文件 过程思路: 1、新建messages_zh_CN.properties中文属性配置文件(zh_CN代表中国大...
  • bq1073100909
  • bq1073100909
  • 2015年11月06日 10:31
  • 1197

Ⅰ.18.3 如何在AUT中使用测试数据

到目前为止这个部分只讨论了在测试脚本中使用测试数据来创建数据驱动的测试。但是实践中出现了另外两个用例。一个用例是AUT读取测试数据文件。例如,假设我们正在使用addressbook AUT,想让它在测...
  • dzh0622
  • dzh0622
  • 2016年01月05日 15:53
  • 471

Ⅰ.7 如何从一个测试脚本中测试多个AUT,使用ApplicationContext

通常,为每个测试套件指定单个被测试的应用程序。然后通过每个测试案例执行和访问这个AUT。所有的教程展示了单个测试套件方法或单个AUT方法,但是事实上,有可能开始多应用程序以及访问,以及在单个测试套件内...
  • dzh0622
  • dzh0622
  • 2015年11月21日 22:23
  • 525

Ⅰ.2.6.4 如何测试 Table Widgets,以及使用外部数据文件(Qt 4)

这个部分,我们将了解如何测试 csvtable 程序。这个程序使用了 QTableWidget 来展现一个 .csv(以逗号间隔开值)文件的内容,它提供了基本的处理数据的功能——插入行、删除行、编辑格...
  • dzh0622
  • dzh0622
  • 2015年11月18日 13:58
  • 322

Ⅰ.2.6.7 如何测试QListView (Qt 3)

这个部分介绍了如何验证一个Qt 3 list view widget(事实上是个tree widget)包含了我们所期望的items。 一种方法是遍历list view中的所有items,检查它们的每...
  • dzh0622
  • dzh0622
  • 2015年11月19日 09:41
  • 259

QT中文乱码与国际化支持

 QT国际化支持    Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性。Qt本身提供的linguist工具,用来实现翻译过程十分方便。MFC中利用资源DLL切换资源...
  • qq19831030qq
  • qq19831030qq
  • 2011年03月02日 11:23
  • 593

QT中文乱码与国际化支持

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

QT中文乱码与国际化支持

转自:http://blog.csdn.net/alicehyxx/article/details/4960571 QT国际化支持     Qt内部采用的全Unicode编码,这从根本上保证了...
  • penaiyan
  • penaiyan
  • 2013年03月27日 17:43
  • 643
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ⅰ.2.9.如何测试支持国际化的Qt AUT
举报原因:
原因补充:

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