我在学习代码测试时遇到了“火鸡测试”这个词。我真的不知道这意味着什么。
什么是火鸡测试?为什么这么叫?
土耳其问题与软件国际化有关,或者仅仅与软件在不同语言文化中的不当行为有关。
各个国家/地区有不同的标准,例如书写日期(土耳其为 14.04.2008,美国为 4/14/2008)、数字(即波兰为 123,45,美国为 123.45)以及字符大写规则(例如在土耳其,字母为 i、I 和 ı)。
正如 Jeff Moser 在下面指出的那样,一位土耳其用户指出了这样的问题,他发现了
ToUpper()
函数中的错误。下面的评论中有更多详细信息。
但是问题不限于土耳其和字符串转换。
例如,在波兰和许多其他国家,日期和数字也以不同的方式书写。
忘掉土耳其吧,这在美国都不会通过。您需要不区分大小写的比较。所以你试试:
String.Compare(string,string,bool ignoreCase):
....
这些是否通过了“火鸡测试?”
没有机会!
原因:你遇到了“土耳其人我”问题。
正如很多人讨论的那样,土耳其语中的“我”的表现与大多数语言不同。根据 Unicode 标准,当我们的小写“i”变为大写时,它会变成“ı”(U+0130“拉丁文大写字母 I,上面有点”)。同样,当我们的大写“I”变为小写时,它会变成“ı”(U+0131“拉丁小写字母无点 I”)。
我们将日期从小写到大,例如 dd.MM.yyyy: 28.10.2010
我们使用“.”(点)作为千位分隔符,使用“,”(逗号)作为小数分隔符:4.567,9
我们有 ö=>Ö, ç=>Ç, ş=>Ş, ğ=>Ğ, ü=>Ü, 最重要的是 ı=>I 和 i => ı;换句话说,大写 I 的小写是无点的,小写 i 的大写是有点的。
由于上述规则造成的无意义错误,人们可能会感到非常紧张。
如果您的代码在土耳其可以正常运行,那么它可能在任何地方都可以工作。
所谓的“土耳其测试”与软件国际化有关。全球化/国际化的一个问题是,不同文化中的日期和时间格式可能在许多层面上有所不同(日/月/年顺序、日期分隔符等)。
此外,土耳其对大写有一些特殊规则,这可能会导致问题。例如,土耳其语“i”字符是许多程序的常见问题,它们以错误的方式大写。
@Luixv 提供的链接给出了该问题的全面描述。
总结是,如果您打算仅在一种非英语语言环境上测试代码,请在土耳其语上进行测试。
这是因为土耳其语具有您在本地化时可能遇到的大多数边缘情况的实例,包括“不寻常”的格式字符串和非标准字符(例如 i 的不同大写规则)。
杰夫·阿特伍德(Jeff Atwood)有一篇关于相同内容的博客文章,这是我自己第一次遇到它。 总之,尝试在土耳其语言环境下运行应用程序是一个很好的测试 您的 I18n。
这是杰夫斯文章