【发布时间】:2010-10-22 06:30:36
【问题描述】:
我在学习代码测试时遇到了“土耳其测试”这个词。我真的不知道这意味着什么。
什么是火鸡测试?为什么叫它?
【问题讨论】:
标签: testing localization internationalization turkey-test
我在学习代码测试时遇到了“土耳其测试”这个词。我真的不知道这意味着什么。
什么是火鸡测试?为什么叫它?
【问题讨论】:
标签: testing localization internationalization turkey-test
土耳其问题与软件国际化有关,或者仅仅与它在各种语言文化中的不当行为有关。
在不同的国家/地区有不同的标准,例如书写日期(土耳其的 14.04.2008 和美国的 4/14/2008)、数字(即波兰的 123,45 和美国的 123.45)以及关于字符大写的规则(比如在土耳其用字母 i、I 和 ı)。
正如Jeff Moser 在下面指出的那样,一位土耳其用户指出了一个这样的问题,他在ToUpper() 函数中发现了一个错误。更多细节在下面的 cmets 中。
但问题不仅限于土耳其和字符串转换。
例如,在波兰和许多其他国家/地区,日期和数字也以不同的方式书写。
来自a Google search for the Turkey Test的一些链接:
【讨论】:
我们把日期写得从小到大,比如 dd.MM.yyyy: 28.10.2010
我们使用'.'(点)作为千位分隔符,','(逗号)作为小数分隔符:4.567,9
我们有ö=>Ö、ç=>Ç、ş=>Ş、ğ=>Ğ、ü=>Ü,以及最重要的是ı=>I和i => İ;也就是说,大写i的小写是无点的,小写的是带点的。
由于上述规则造成的无意义错误,人们可能会感到非常紧张。
如果您的代码在土耳其正常运行,它可能会在任何地方运行。
【讨论】:
Here is described the turkey test
忘记土耳其吧,这在美国也不会发生。您需要不区分大小写的比较。所以你试试:
String.Compare(string,string,bool ignoreCase):....
这些是否通过了“火鸡测试”?
没有机会!
原因:你遇到了“土耳其 I”问题。
正如许多人所讨论的那样,土耳其语中的“我”的行为与大多数语言中的不同。根据 Unicode 标准,我们的小写“i”在变为大写时变为“İ”(U+0130“拉丁大写字母 I,上面带有点”)。同样,我们的大写“I”在移动到小写时变成了“ı”(U+0131 “Latin Small Letter Dotless I”)。
【讨论】:
所谓的“土耳其测试”与软件国际化有关。全球化/国际化的一个问题是,不同文化中的日期和时间格式可能在许多层面上有所不同(日/月/年顺序、日期分隔符等)。
此外,土耳其有一些特殊的大写规则,这可能会导致问题。例如,土耳其语“i”字符是许多以错误方式大写它的程序的常见问题。
【讨论】:
Jeff Atwood 有一篇关于相同的博客文章,这是我自己第一次看到它。 总之,尝试在土耳其语区域设置下运行您的应用程序是一个很好的测试 你的 I18n。
这里是杰夫斯article
【讨论】:
@Luixv 提供的链接对问题进行了全面的描述。
总结是,如果您只在一种非英语语言环境中测试您的代码,请在土耳其语环境中进行测试。
这是因为土耳其语包含您在本地化时可能遇到的大多数极端情况的实例,包括“不寻常”的格式字符串和非标准字符(例如 i 的不同大写规则)。
【讨论】: