【问题标题】:What is The Turkey Test?什么是火鸡测试?
【发布时间】:2010-10-22 06:30:36
【问题描述】:

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

什么是火鸡测试?为什么叫它?

【问题讨论】:

    标签: testing localization internationalization turkey-test


    【解决方案1】:

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

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

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

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

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

    来自a Google search for the Turkey Test的一些链接:

    【讨论】:

    • 我将其称为“土耳其测试”,因为土耳其的用户是第一个在我们的代码中发现由我在帖子中描述的 ToUpper() 错误触发的错误的人。
    • “我不知道为什么这个问题被称为土耳其问题,因为在波兰和许多其他欧洲国家,日期和数字的书写方式也不同。”它主要是关于“İ”字母的大写/小写。例如,Microsoft Service Trace Viewer 工具就遇到了这个问题。当您想打开 Inetpub 文件夹下的日志文件时,您会得到一条错误消息,提示“'c:\ınetpub\...' 无法打开”
    • 这是因为字母 i/I 的土耳其语大小写规则是少数几个突出的例子之一,其中正确的国际字符串处理具有没有人预料到的细粒度的微妙之处,因此倾向于以非常痛苦的方式破坏代码。字母 i 在英语和土耳其语中都很常见,但您需要知道您使用的是哪种语言才能正确地将其大写。当您在土耳其语上下文中使用非土耳其语单词的非常常见的场景时,这尤其痛苦 - 您需要有每个字符串的语言设置!相比之下,日期格式是小菜一碟。
    【解决方案2】:

    我们把日期写得从小到大,比如 dd.MM.yyyy: 28.10.2010

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

    我们有ö=>Ö、ç=>Ç、ş=>Ş、ğ=>Ğ、ü=>Ü,以及最重要的是ı=>I和i => İ;也就是说,大写i的小写是无点的,小写的是带点的。

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

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

    【讨论】:

      【解决方案3】:

      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”)。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          这里是杰夫斯article

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              猜你喜欢
              • 2011-01-12
              • 1970-01-01
              • 2011-11-07
              • 2012-07-22
              • 2010-10-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多