We've changed the culture names for the .Net Framework in Windows Vista to match the locale names used in Vista, which were changed to be more like the IETF standard names. Previously .Net Framework 2.0 culture names looked like "language"-"country" or "language"-"country"-"script" if a script distinction was necessary.
Additonally some names have been standardized to their ISO standard names, for example zh-Hant instead of zh-CHT. The resulting names look like:
|iu-Latn-CA||Inuktitut (Latin, Canada)|
Since some resources in the Framework may expect zh-CHT, the parent for zh-Hant is set to zh-CHT as a temporary aid for resource lookup.
In the event that an application needs to access locales by the pre-Vista names, they can create a custom culture with the old name using the CultureAndRegionInfoBuilder class. For example:
static void Main()
CultureAndRegionInfoBuilder carib =
new CultureAndRegionInfoBuilder("en-CB", CultureAndRegionModifiers.None);
// This was just an example, I don't really want this locale on my machine 🙂
C:\examples>csc /r:sysglobl.dll test.cs
Inuktitut (Latin, Canada)
In this example, the first English (Caribbean) was written using the Vista name, and the second using the custom culture created using the pre-Vista name.
This will hopefully be more helpful to other applications since these names follow the standards more closely. Web applications may have an easier time loading resources, although clients could still request resources for "en", "en-US", or "en-Latn-US", yet the .Net Framework culture is "en-US".