Okay, you're not going to believe this. I was in middle of debugging an issue in a Kiosk application, which I've been globalizing for a Chinese deployment (I'll leave out the company to be safe), when an exception (error in layman terms) came up after attempting to set the UI culture of the application to the culture 'zh-Hans' (Simplified Chinese).
The .NET Framework 3.5 source code is available for developers to step-into for debugging purposes, so I decided to take a dive in and see what I could come up with. After stepping into the code, I discovered some comments, which attempted to explain my problem, marked in green:
int lcid = culture.LCID;
//If we have the Chinese locale, we have no way of producing a
//specific culture without encountering significant geopolitical
//issues. Based on that, we have no choice but to return.
if((lcid & 0x3FF)==0x04) { throw new ArgumentException(Environment.GetResourceString("Argument_NoSpecificCulture")); }
What's interesting here (to me at least), is the fact that the variable 'lcid' creates the specific culture called simplified Chinese and so the line at if((lcid & 0x3FF) == 0x04) has to be true for the error to be thrown. If it looks cryptic, that's because it is!!! Not sure why they decided to pass it in as hex rather than simply check if the culture is under one specific ID. It's like the magic equation to identify geopolitical issues (or not). For some reason, simplified Chinese happens to have the right lcid to raise the exception, (4 == 4) is true in this case.
Is this political code? With all of the political issues with China lately, the Olympics coming up, I thought this was a fun snip-it and maybe even a little relevant. I am not an expert on what this is saying but my poli-sci friend tells me that it's likely related to something with Taiwanese so he suggested I post a blog entry about it. SO, it's not the most exciting thing in the world but it's still kind of funny to see an exception thrown because of geopolitical issues.
The source code above is from the .NET Framwork 3.5, CultureInfo.cs, line 636...
Here are the list of available cultures:
http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx
Update: The workaround is to use zh-CN for simplified chinese. As the comments suggest, this is due to geopolitical reasons.