zh-Hans, zh-Hant and the "old" zh-CHS, zh-CHT

With Windows Vista and Microsoft .Net 2.0 (MS07-040 security patch) and 3.0+, we've started to use the IETF standard "zh-Hans", and "zh-Hant" names for Chinese simplified and traditional.  In windows the zh-CHS/zh-CHT names were never used because the named APIs are new to Vista.  Also in Silverlight we don't use the old names since Silverlight is new.

However in .Net 2.0/3.x we still recognize zh-CHS & zh-CHT for backwards compatibility.  Additionally we prefer the "old" zh-CHS and zh-CHT names when enumerating or returning the name of a CultureInfo created by LCID (0x0004 or 0x7c04)  The other oddity is that to recognize more resources, we made the parent of zh-CHS/zh-CHT be zh-Hans/zh-Hant. 

This allows resources labeled zh-Hans or zh-Hant (the preferred name) to be loaded by systems that used the older zh-CHS/zh-CHT names.  Unfortunately they can't be parents of each other, so this resource fallback only works one direction.  You cannot normally find zh-CHS resources if you start with a zh-Hans locale.  So the recommendation is to use zh-Hans/zh-Hant when creating resources.

In the future (like v4+, we're not sure when) zh-CHS/zh-CHT will no longer be recognized by default.  Users will still be able to create zh-CHS/zh-CHT custom cutlures if necessary to workaround legacy naming related issues, similar to the way you can make an az-AZ-Latn now to work around that name change.