53

我在学习代码测试时遇到了“土耳其测试”这个词。我真的不知道这意味着什么。

什么是火鸡测试?为什么这样称呼?

4

6 回答 6

41

土耳其问题与软件国际化有关,或者只是与它在各种语言文化中的不当行为有关。

在不同的国家/地区有不同的标准,例如书写日期(土耳其的 14.04.2008 和美国的 4/14/2008)、数字(即波兰的 123,45 和美国的 123.45)和关于字符大写的规则(如带有字母 i、I 和 ı) 的土耳其。

正如Jeff Moser在下面指出的那样,一位土耳其用户指出了一个这样的问题,他在ToUpper()函数中发现了一个错误。下面的评论中有更多细节。

但是,问题不仅限于土耳其和字符串转换。

例如,在波兰和许多其他国家,日期和数字也以不同的方式书写。

谷歌搜索土耳其测试的一些链接:

于 2009-04-28T09:39:51.850 回答
21

这里描述了火鸡测试

忘掉土耳其吧,这甚至不会在美国发生。您需要不区分大小写的比较。所以你尝试:

String.Compare(string,string,bool ignoreCase):

……

这些是否通过了“火鸡测试”?

没有机会!

原因:您遇到了“土耳其语 I”问题。

正如很多人所讨论的那样,土耳其语中的“我”的行为与大多数语言中的不同。根据 Unicode 标准,我们的小写“i”在变为大写时变为“İ”(U+0130“拉丁大写字母 I,上面带有点”)。类似地,我们的大写“I”在变为小写时变为“ı”(U+0131“Latin Small Letter Dotless I”)。

于 2009-04-28T09:29:44.637 回答
13

我们将日期从小到大写成 dd.MM.yyyy: 28.10.2010

我们使用 '.'(点)作为千位分隔符,使用 ','(逗号)作为小数分隔符:4.567,9

我们有ö=>Ö, ç=>Ç, ş=>Ş, ğ=>Ğ, ü=>Ü,最重要的是 ı=>I 和 i => İ ; 换句话说,上 i 的小写字母是无点的,而小写 i 的大写字母是点状的。

由于上述规则造成的无意义的错误,人们可能会感到非常紧张。

如果您的代码在土耳其正常运行,它可能会在任何地方运行。

于 2010-10-28T18:54:23.183 回答
4

所谓的“土耳其测试”与软件国际化有关。全球化/国际化的一个问题是,不同文化中的日期和时间格式可能在许多层面上有所不同(日/月/年顺序、日期分隔符等)。

此外,土耳其有一些特殊的大写规则,这可能会导致问题。例如,土耳其语“i”字符是许多以错误方式大写它的程序的常见问题。

于 2009-04-28T09:46:26.483 回答
2

@Luixv 提供的链接对问题进行了全面的描述。

总结是,如果您只在一种非英语语言环境中测试您的代码,请在土耳其语环境中进行测试。

这是因为土耳其语具有您在本地化时可能遇到的大多数边缘情况的实例,包括“不寻常的”格式字符串和非标准字符(例如 i 的不同大写规则)。

于 2009-04-28T09:42:29.253 回答
1

Jeff Atwood 有一篇关于同一的博客文章,这是我自己第一次遇到它。总之,尝试在土耳其语区域设置下运行您的应用程序是对您的 I18n 的极好测试。

这是杰夫的文章

于 2009-04-28T09:44:14.837 回答