How to use enable pseudo-locale in Windows for testing?

前端 未结 4 1512
礼貌的吻别
礼貌的吻别 2020-12-01 00:35

Windows Vista introduced the concept of three pseudo-locales:

Pseudo Locale        Locale Name  LCID           
===================  ===========  ======
Base         


        
相关标签:
4条回答
  • 2020-12-01 00:51

    Windows 10 1803

    Unfortunately, as of Windows 10 1803, it appears to no longer be possible to enable these locales:

    For Windows 10, version 1803, editing the Windows Registry like this has no effect. But you can still call the non-enumerating NLS APIs with the names of the pseudo-locales (see the code examples above) to populate your user interface (UI).

    According to https://social.technet.microsoft.com/Forums/office/en-US/88de942e-7967-4419-b1fb-23d200c75fe3/unable-to-use-psuedo-locales-after-1803-win-10-update?forum=win10itprogeneral,

    Note that they still work as they are built-in to Windows, “just” that they don't show up in the enumeration - so they don't show up in the drop down - so that makes them a bit trickier to use. I'm working to find a workaround.

    Basically, if you copy the registry values from Computer\HKEY_CURRENT_USER\Control Panel\International (not the subkeys) from a machine using the appropriate pseudo locale, then that should be used for further processes, even if it is not enumerated.

    Registry values for manual config

    Here are the exported values from a 1607 system. They can be put into a .reg file for easy import.

    If using a .reg file, the following header is required:

    Windows Registry Editor Version 5.00
    

    Pseudo (Pseudo) [qps-ploc]

    [HKEY_CURRENT_USER\Control Panel\International]
    "Locale"="00000501"
    "LocaleName"="qps-ploc"
    "s1159"="АΜ"
    "s2359"="P̰̃M]"
    "sCountry"="Pseudo"
    "sCurrency"="$"
    "sDate"="/"
    "sDecimal"="."
    "sGrouping"="4;0"
    "sLanguage"="ENU"
    "sList"=",,"
    "sLongDate"="ffffdd, d 'ōf' MMMM 'ōf' yyyy"
    "sMonDecimalSep"="."
    "sMonGrouping"="4;0"
    "sMonThousandSep"=",,"
    "sNativeDigits"="0123456789"
    "sNegativeSign"="-"
    "sPositiveSign"="++"
    "sShortDate"="d/MM/yy"
    "sThousand"=",,"
    "sTime"=":"
    "sTimeFormat"="H:mm:ss"
    "sShortTime"="h:mm tt"
    "sYearMonth"="MMMM yyyy"
    "iCalendarType"="1"
    "iCountry"="61"
    "iCurrDigits"="3"
    "iCurrency"="0"
    "iDate"="1"
    "iDigits"="3"
    "NumShape"="1"
    "iFirstDayOfWeek"="0"
    "iFirstWeekOfYear"="0"
    "iLZero"="1"
    "iMeasure"="1"
    "iNegCurr"="1"
    "iNegNumber"="1"
    "iPaperSize"="1"
    "iTime"="1"
    "iTimePrefix"="0"
    "iTLZero"="0"
    

    Pseudo (Pseudo Asia) [qps-ploca]

    [HKEY_CURRENT_USER\Control Panel\International]
    "Locale"="000005FE"
    "LocaleName"="qps-ploca"
    "s1159"="午前"
    "s2359"="午後"
    "sCountry"="Pseudo Asia"
    "sCurrency"="¥"
    "sDate"="/"
    "sDecimal"="."
    "sGrouping"="3;0"
    "sLanguage"="JPN"
    "sList"=","
    "sLongDate"="yyyy'年'M'月'd'日'"
    "sMonDecimalSep"="."
    "sMonGrouping"="3;0"
    "sMonThousandSep"=","
    "sNativeDigits"="0123456789"
    "sNegativeSign"="-"
    "sPositiveSign"=""
    "sShortDate"="yyyy/MM/dd"
    "sThousand"=","
    "sTime"=":"
    "sTimeFormat"="H:mm:ss"
    "sShortTime"="H:mm"
    "sYearMonth"="yyyy'年'M'月'"
    "iCalendarType"="1"
    "iCountry"="81"
    "iCurrDigits"="0"
    "iCurrency"="0"
    "iDate"="2"
    "iDigits"="2"
    "NumShape"="1"
    "iFirstDayOfWeek"="6"
    "iFirstWeekOfYear"="0"
    "iLZero"="1"
    "iMeasure"="0"
    "iNegCurr"="1"
    "iNegNumber"="1"
    "iPaperSize"="9"
    "iTime"="1"
    "iTimePrefix"="0"
    "iTLZero"="0"
    

    Pseudo (Pseudo Mirrored) [qps-plocm]

    [HKEY_CURRENT_USER\Control Panel\International]
    "Locale"="000009FF"
    "LocaleName"="qps-plocm"
    "s1159"="ص"
    "s2359"="م"
    "sCountry"="Pseudo Mirrored"
    "sCurrency"="ر.س.‏"
    "sDate"="/"
    "sDecimal"="."
    "sGrouping"="3;0"
    "sLanguage"="ARA"
    "sList"=";"
    "sLongDate"="dd/MMMM/yyyy"
    "sMonDecimalSep"="."
    "sMonGrouping"="3;0"
    "sMonThousandSep"=","
    "sNativeDigits"="٠١٢٣٤٥٦٧٨٩"
    "sNegativeSign"="-"
    "sPositiveSign"=""
    "sShortDate"="dd/MM/yy"
    "sThousand"=","
    "sTime"=":"
    "sTimeFormat"="hh:mm:ss tt"
    "sShortTime"="hh:mm tt"
    "sYearMonth"="MMMM, yyyy"
    "iCalendarType"="23"
    "iCountry"="966"
    "iCurrDigits"="2"
    "iCurrency"="2"
    "iDate"="1"
    "iDigits"="2"
    "NumShape"="0"
    "iFirstDayOfWeek"="5"
    "iFirstWeekOfYear"="0"
    "iLZero"="1"
    "iMeasure"="0"
    "iNegCurr"="3"
    "iNegNumber"="3"
    "iPaperSize"="9"
    "iTime"="0"
    "iTimePrefix"="0"
    "iTLZero"="1"
    

    Pseudo (Pseudo Selfhost) [qps-Latn-x-sh]

    [HKEY_CURRENT_USER\Control Panel\International]
    "Locale"="00000901"
    "LocaleName"="qps-Latn-x-sh"
    "s1159"="AM"
    "s2359"="PM"
    "sCountry"="Pseudo Selfhost"
    "sCurrency"="J$"
    "sDate"="/"
    "sDecimal"="."
    "sGrouping"="3;0"
    "sLanguage"="ENJ"
    "sList"=","
    "sLongDate"="dd MMMM, yyyy"
    "sMonDecimalSep"="."
    "sMonGrouping"="3;0"
    "sMonThousandSep"=","
    "sNativeDigits"="0123456789"
    "sNegativeSign"="-"
    "sPositiveSign"=""
    "sShortDate"="dd/MM/yyyy"
    "sThousand"=","
    "sTime"=":"
    "sTimeFormat"="HH:mm:ss"
    "sShortTime"="HH:mm"
    "sYearMonth"="MMMM, yyyy"
    "iCalendarType"="1"
    "iCountry"="1"
    "iCurrDigits"="2"
    "iCurrency"="0"
    "iDate"="1"
    "iDigits"="2"
    "NumShape"="1"
    "iFirstDayOfWeek"="6"
    "iFirstWeekOfYear"="0"
    "iLZero"="1"
    "iMeasure"="0"
    "iNegCurr"="1"
    "iNegNumber"="1"
    "iPaperSize"="1"
    "iTime"="1"
    "iTimePrefix"="0"
    "iTLZero"="1"
    
    0 讨论(0)
  • 2020-12-01 01:00

    It looks like rather than fixing the localization bugs in .NET, SQL Server, Excel, etc, Microsoft changed the Pseudo locale in Windows 10 to mask the bugs:

    | 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  | --                       | -                     |
    

    I can understand not wanting to fix your bugs, because you're lazy it's too hard. But you should have been forced to wear your shame for all to see.

    Instead you cop-out and try to hide your failure. That's just bad.

    0 讨论(0)
  • 2020-12-01 01:02

    How do i enable pseudo-locale's in Windows?

    Initially the four pseudo-locale's are not visible in the Control Panel: (archive.org)

    Note that NLS does not automatically enumerate the pseudo-locales or expose them in the regional and language options portion of the Control Panel. They are only enumerable if values are set in the registry.

    You enable them by adding some registry keys:

    [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Locale]
    "00000501"="1" // qps-ploc (Windows Vista and later)
    "000005fe"="7" // qps-ploca (Windows Vista and later)
    "00000901"="1" // qps-Latn-x-sh (Windows 10 and later)
    "000009ff"="d" // qps-plocm (Windows Vista and later)
    

    Which can be done in RegEdit:

    enter image description here

    Then you can go to Regional and Language Options in the Control Panel:

    enter image description here

    and select the pseudo-locale:

    enter image description here

    The three different pseudo-locale are for testing 3 kinds of locales:

    Base The qps-ploc locale is used for English-like pseudo localizations. Its strings are longer versions of English strings, using non-Latin and accented characters instead of the normal script. Additionally simple Latin strings should sort in reverse order with this locale.

    Mirrored qpa-mirr is used for right-to-left pseudo data, which is another area of interest for testing.

    East Asian qps-asia is intended to utilize the large CJK character repertoire, which is also useful for testing.


    Warning: Do not try to change the "System Locale":

    enter image description here

    to a new pseudo-locale:

    enter image description here

    Otherwise after the reboot:

    enter image description here

    Windows will fail to start:

    enter image description here

    And the only fix will be to manually edit the registry from the Recovery Console; restoring the old en-US locale.


    Warning

    Use of pseudo-locales is used to find localization bugs in software. Unfortunately this will also let you find bugs in other people's software; including Microsoft's:

    • SQL Server Management Studio1 crashes when presented with other locales (Microsoft Connect):

      enter image description here
      enter image description here enter image description here

    • Microsoft Excel will no longer let you enter functions (the comma used to separate parameters no longer works)

    • Visual Studio will no longer let you edit comma separated properties

    • The SQL Server Management Studio diagram designer reports an error

    • .NET has a bug in the date and time formatting, showing 22////11////2011 4::::42::::53 P̰̃M]

    • Windows Event Viewer:

      enter image description here

    • Task Scheduler:

      enter image description here

    • SQL Server Management Studio:

      enter image description here

    Good luck with getting Microsoft to dogfood their own product.

    110.50.1617.0


    Update 4//10/2012:

    Trying to Edit top 200 rows of a table in SQL Server Management Studio:

    enter image description here

    Executed SQL statement SELECT TOP (200) ...
    Error Source: Microsoft.SqlServer.Management.DataTools
    Error Message: Object reference not set to an instance of an object

    Is fixed by changing Negative sign symbol from -- to -.

    Bonus Reading

    • Pseudo Locales in Windows Vista Beta 2 (archive.is)
    • How do you test your app for Iñtërnâtiônàlizætiøn? (Internationalization?)
    • Michael Kaplan: One of my colleagues is the "Pseudo Man" (a rich source of puns in conversation!) (RIP) (archive.is)
    • https://en.wikipedia.org/wiki/Pseudolocalization
    • MSDN: Using pseudo-locales for localizability testing archive
    0 讨论(0)
  • 2020-12-01 01:07

    You can also change Internet Explorer's Accept-Languages to request qps-ploc language:

    enter image description here

    You can use this to test that your web-site supports psuedo-locale, and check any missing localizations:

    You can see i missed two bits of text in this sample web-site.

    0 讨论(0)
提交回复
热议问题