英语非美国文化问题

Issue with English non-US Culture

我可以使用 Set-Culture(Powershell 作为管理员)将当前文化设置为 "en-DE",即英语(德国)。但是,当我 运行 使用不同的 PS 命令查看当前文化时,我仍然得到 en-US。我也检查了我的地区(格式)和位置。

我是否必须将系统区域设置也更改为德国(德语)?

这会导致应用程序出错,因为日期时间格式从 en-DE 到 en-US 不同,导致日期读取不正确。

当我 Set-Culturede-DE 时,一切似乎都在正常工作。

我确保以管理员身份 运行 Powershell 控制台,Set-Culture,关闭控制台。打开 Powershell 和 运行 Get-Culture[CultureInfo]::CurrentCulture[CultureInfo]::CurrentUICulture 和其他几个来检查并且仍然得到 en-US

注意:使用 en-DE 作为文化标识符 - 即混合 语言 en(英语) 通常不相关 region/country DE(德国)- 需要 Windows 10 发布频道 1607 或更高版本Windows 服务器 2016according to Microsoft

但是,在 Windows 10 Pro(64-位;版本 1709,OS 构建:16299.371)

虽然您可以使用 Set-Culture 成功地 设置 此类混合文化值,但后续会话无法识别它并退回到 en-US(反映在 $PSCultureGet-Culture[cultureinfo]::currentCulture


此答案的其余部分讨论了一般情况下持续设置当前用户的文化,而不考虑错误。


Set-Culture - 通过注册表 - 未来 PowerShell 会话设置文化(仅限) ,不(也)用于 当前 会话。

Get-Culture,相比之下,只有 报告 当前 会话的文化 在会话启动时。也就是说,如果您 会话期间更改文化(见下文),它将 而不是 反映在 Get-Culture 中。

为了也将新设置的区域性应用于当前会话,运行以下除了 Set-Culture 电话:

[cultureinfo]::CurrentCulture = 'de-DE'

警告 interactive(命令行)使用:

  • Windows PowerShell(仍然是v5.1)中,活动区域性是重置每条命令提交后;例如,
    [cultureinfo]::CurrentCulture = 'de-DE'; Get-Date 按预期工作,因为它是同一命令行的一部分,但是当仅将 Get-Date 作为 next 命令执行时,当前文化已恢复为一个在 会话启动时间 时是当前的。
    • 此问题已在 PowerShell Core.
    • 中修复

可能令人惊讶的不对称性 - Set-Culture 仅适用于 未来 会话,但 Get-Culture 报告 当前 会话的(启动)文化 - may change in future PowerShell Core versions.