【问题标题】:System Locale in .NET.NET 中的系统区域设置
【发布时间】:2013-08-08 13:19:03
【问题描述】:

我已通过

将系统区域设置为中文(简体PRC)
ControlPanel >> Region and Language >> Administrative >> Change System locale

然后我重新启动计算机并运行我的 .NET 4.0 应用程序。

跑步

Thread.CurrentThread.CurrentCulture.Name

返回

en-GB

为什么?

【问题讨论】:

  • 尝试:Thread.CurrentThread.CurrentUICulture.Name(注意 UI)
  • 我得到与Thread.CurrentThread.CurrentUICulture.Name 相同的行为

标签: c# locale culture


【解决方案1】:

MSDN 这么说

默认文化和格式模式等信息是 第一次被请求时缓存。该信息可能会改变 在 AppDomain 的生命周期内,例如,当用户修改 控制面板的区域和语言选项部分。然而, CultureInfo 类不会自动检测 系统设置。

先调用这个

 Thread.CurrentThread.CurrentCulture.ClearCachedData();

【讨论】:

  • 我可以通过将Region and Language >> Formats 设置为Chinese (SImplified PRC) 来让Thread.CurrentThread.CurrentCulture.Name 返回预期值。这是预期的行为吗? .NET 中暴露的文化似乎只受此“格式”设置的影响。
  • @Ben 我没有收到你的问题
  • 更改ControlPanel >> Region and Language >> Administrative >> Change System locale 似乎不会更改Thread.CurrentThread.CurrentCulture.Name 中公开的值。相反,根据我的实验,设置 Control Panel >> Region and Language >> Formats 可以。这是按照你的理解。我假设在控制面板中设置“区域设置”会在 .NET 中设置区域设置。
  • 我将不得不检查 System Local 所做的更改。虽然 MSDN 确实说更改默认格式会影响文化
【解决方案2】:

看起来可以看到系统区域设置的地方是 System.Text.Encoding.Default

PS:“...更改系统区域设置”会影响用于“非 Unicode”应用程序的 ANSI 代码页(来自 Win32 API 的 *A() 调用)。在大多数情况下,.NET 应用程序不需要关心它,因为它们使用 Unicode 字符串和 Unicode API。但是我要和非unicode的应用交互,所以需要查询当前系统的locale。

【讨论】:

  • 我认为这一定是错误的。我看不到任何与文化相关的东西,只是编码。
  • “系统语言环境”与文化关系不大,但理解它,也就是“只是编码”
猜你喜欢
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多