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.