我刚刚按照MSDN文章How to: Create Custom Cultures中描述的步骤创建并注册了新文化。
var cib = new CultureAndRegionInfoBuilder(CultureName, CultureAndRegionModifiers.None);
cib.LoadDataFromCultureInfo(new CultureInfo("cs-CZ"));
cib.LoadDataFromRegionInfo(new RegionInfo("CZ"));
cib.CultureNativeName = CultureNativeName;
cib.CultureEnglishName = CultureNativeName;
cib.NumberFormat.NumberDecimalSeparator = separator
cib.Register();
一切看起来都很好。我可以在Windows中的“区域和语言”对话框中看到我的新文化。我甚至可以将文化加载到我的应用程序中。
当我在控制面板中的“区域和语言”对话框中直接更改某些内容时(假设NumberDecimalSeparator应为点“。”而不是逗号“,”)然后尝试检索文化:
var ci = CultureInfo.GetCultureInfo(CultureName);
ci.ClearCachedData();
ci = CultureInfo.GetCultureInfo(CultureName);
我仍然保留了我注册的相同文化信息。检索到的CultureInfo对象中不会预测手动更改。
这是一种正确的行为还是我做错了什么?
修改
如果我再次考虑它,显然问题是我在IIS下运行应用程序的用户帐户不同于在控制面板中更改文化信息的用户,因为它是 UserCustomCulture 正如我所注意到的那样。
正确的问题是,如何为所有用户(或至少为IIS用户和某些管理员用户)注册文化?
我想要这样做的原因: