如何在Windows中使用启用伪区域进行testing?

Windows Vista引入了三个伪区域的概念:

Pseudo Locale Locale Name LCID =================== =========== ====== Base qps-ploc 0x0501 Mirrored qps-mirr 0x09ff East Asian-language qps-asia 0x05fe 

启用Base语言环境非常有用,因为您可以检查应用程序是否使用当前语言环境来格式化date,时间,数字,金钱等项目。

例如,当前的语言环境设置为Base时 ,date将被格式化为:

[Шěđлеśđαỳ!!!],8ōf[Μäŕςћ!!]ōf2006

Windows的构build实际上是在伪造的 ,然后本地化为英语:

在这里输入图像说明

使用这些语言环境的另一个值:它testing您的应用程序不会假设16位PRIMARYLANGID由以下内容组成:

  • 8位主要语言ID
  • 8位的子语言ID

当实际上PRIMARYLANGID是 :

  • 一个10位的主要语言ID
  • 一个6位的子语言ID

或graphics:

 +-----------------------+-------------------------+ | Sublanguage ID | Primary Language ID | +-----------------------+-------------------------+ 15 10 9 0 bit 

这三个伪区域终于走到了第8位的末端(微软已经为打破越野车应用而疲惫不堪)。

我如何在Windows中启用伪区域设置?

也可以看看

  • MSDN:伪地区
  • MSDN:使用伪区域进行本地化testing
  • MSDN博客:Windows Vista Beta 2中的伪区域设置
  • MSDN博客:我的同事之一是“伪人”(对话中双关语的丰富来源!)
  • MSDN博客:走出第八位的结尾

我如何在Windows中启用伪区域设置?

最初,三个伪区域在“控制面板”中不可见 :

请注意,NLS不会自动枚举伪区域或将其公开在控制面板的区域和语言选项部分。 只有在注册表中设置了值时,它们才是可枚举的。

通过添加一些注册表项来启用它们:

 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Locale] "00000501"="1" "000009ff"="d" "000005fe"="7" 

哪些可以在RegEdit中完成:

在这里输入图像说明

然后,您可以转到“控制面板”中的“ 区域和语言选项 ”:

在这里输入图像说明

并选择伪区域设置:

在这里输入图像说明

三种不同的伪区域用于测试3种语言环境:

基础 qps-ploc语言环境用于类似英语的伪本地化。 它的字符串是英文字符串的较长版本,使用非拉丁文和重音字符而不是普通脚本。 另外,简单的拉丁字符串应该按照与本地区相反的顺序进行排序

镜像 qpa-mirr用于从右到左的伪数据,这是另一个感兴趣的测试领域。

东亚 qps-asia旨在利用大型CJK字符库,这对于测试也很有用。


警告:不要尝试更改“系统区域设置”

在这里输入图像说明

到一个新的伪区域:

在这里输入图像说明

否则重启后:

在这里输入图像说明

Windows将无法启动:

在这里输入图像说明

唯一的解决方法是从故障恢复控制台手动编辑注册表 ; 恢复旧en-US语言环境。


警告

伪区域的使用用于在软件中查找本地化错误。 不幸的是,这也会让你在别人的软件中发现错误; 包括微软的:

  • 与其他语言环境( Microsoft Connect )一起提供时,SQL server Management Studio 1崩溃:

    在这里输入图像说明
    在这里输入图像说明在这里输入图像说明

  • Microsoft Excel将不再允许您输入函数(用于分隔参数的逗号不再有效)

  • Visual Studio将不再允许您编辑逗号分隔的属性

  • SQL server Management Studio关系图设计器报告错误

  • .NET在日期和时间格式上有一个错误,显示22////11////2011 4::::42::::53 P̰̃M]

  • Windows事件查看器:

    在这里输入图像说明

  • 任务计划程序:

    在这里输入图像说明

  • SQL server管理工作室:

    在这里输入图像说明

祝愿微软能够把自己的产品用于食品。

1 10.50.1617.0


更新4 // 10/2012:

尝试在SQL server Management Studio中编辑表的前200行

在这里输入图像说明

执行的SQL语句SELECT TOP(200)…
错误源:Microsoft.Sqlserver.Management.DataTools
错误消息:对象引用未设置为对象的实例

通过将负号符号--改为-来修复。

您还可以更改Internet Explorer的Accept-Languages来请求qps-ploc语言:

在这里输入图像说明

您可以使用它来测试您的网站是否支持psuedo-locale,并检查是否有缺失的本地化:

在这里输入图像说明

你可以看到我在这个示例网站中遗漏了两位文本。

它看起来像而不是修复.NET,SQL server,Excel等的本地化错误,微软在Windows 10中更改了伪语言环境来掩盖错误:

 | Item | Windows 7 | Windows 10 | |-----------------------|--------------------------|-----------------------| | Locale Identifier | 0x0501 (1281) | 0x0501 (1281) | | Locale Name | qps-ploc | qps-ploc | | Example Number | --123,,4567,,8901 | -123,,4567,,8901 | | Example Currency | --$$123,,4567,,8901..00 | -$123,,4567,,8901.000 | | Example Float | --123,,4567,,8901..00 | -123,,4567,,8901.000 | | Example Date | 9//08//2015 | 9/8/2015 | | Example Time | 9::51::17 АΜ | 9:45:09 | | Example DateTime | 9//08//2015 9::51::17 АΜ | 9/8/2015 9:45 | | LOCALE_SLANGUAGE | Pseudo Language (Pseudo) | Pseudo (Pseudo) | | LOCALE_SENGLANGUAGE | Pseudo Language | Pseudo | | LOCALE_SDECIMAL | .. | . | | LOCALE_SCURRENCY | $$ | $ | | LOCALE_SMONDECIMALSEP | .. | . | | LOCALE_SDATE | // | / | | LOCALE_STIME | :: | : | | LOCALE_SSHORTDATE | d//MM//yyyy | d/MM/yy | | LOCALE_STIMEFORMAT | h::mm::ss tt | H:mm:ss | | LOCALE_ITIME | 0 | 1 | | LOCALE_ICENTURY | 1 | 0 | | LOCALE_SNEGATIVESIGN | -- | - | 

我可以理解,不想修复你的错误,因为你太懒了,太难了。 但是你应该被迫为所有人看到你的耻辱。

相反,你要指出并试图隐藏你的失败。 那太糟糕了。