英语非美国文化问题
Issue with English non-US Culture
我可以使用 Set-Culture
(Powershell 作为管理员)将当前文化设置为 "en-DE"
,即英语(德国)。但是,当我 运行 使用不同的 PS 命令查看当前文化时,我仍然得到 en-US
。我也检查了我的地区(格式)和位置。
我是否必须将系统区域设置也更改为德国(德语)?
这会导致应用程序出错,因为日期时间格式从 en-DE 到 en-US 不同,导致日期读取不正确。
当我 Set-Culture
到 de-DE
时,一切似乎都在正常工作。
我确保以管理员身份 运行 Powershell 控制台,Set-Culture
,关闭控制台。打开 Powershell 和 运行 Get-Culture
、[CultureInfo]::CurrentCulture
、[CultureInfo]::CurrentUICulture
和其他几个来检查并且仍然得到 en-US
注意:使用 en-DE
作为文化标识符 - 即混合 语言 en
(英语) 通常不相关 region/country DE
(德国)- 需要 Windows 10 发布频道 1607
或更高版本 或 Windows 服务器 2016、according to Microsoft。
但是,在 Windows 10 Pro(64-位;版本 1709,OS 构建:16299.371)
虽然您可以使用 Set-Culture
成功地 设置 此类混合文化值,但后续会话无法识别它并退回到 en-US
(反映在 $PSCulture
、Get-Culture
和 [cultureinfo]::currentCulture
)
- 这个problem has been reported on UserVoice.
- 请注意,PowerShell Core 不受影响(但不支持
Set-Culture
)。
此答案的其余部分讨论了一般情况下持续设置当前用户的文化,而不考虑错误。
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.
我可以使用 Set-Culture
(Powershell 作为管理员)将当前文化设置为 "en-DE"
,即英语(德国)。但是,当我 运行 使用不同的 PS 命令查看当前文化时,我仍然得到 en-US
。我也检查了我的地区(格式)和位置。
我是否必须将系统区域设置也更改为德国(德语)?
这会导致应用程序出错,因为日期时间格式从 en-DE 到 en-US 不同,导致日期读取不正确。
当我 Set-Culture
到 de-DE
时,一切似乎都在正常工作。
我确保以管理员身份 运行 Powershell 控制台,Set-Culture
,关闭控制台。打开 Powershell 和 运行 Get-Culture
、[CultureInfo]::CurrentCulture
、[CultureInfo]::CurrentUICulture
和其他几个来检查并且仍然得到 en-US
注意:使用 en-DE
作为文化标识符 - 即混合 语言 en
(英语) 通常不相关 region/country DE
(德国)- 需要 Windows 10 发布频道 1607
或更高版本 或 Windows 服务器 2016、according to Microsoft。
但是,在 Windows 10 Pro(64-位;版本 1709,OS 构建:16299.371)
虽然您可以使用 Set-Culture
成功地 设置 此类混合文化值,但后续会话无法识别它并退回到 en-US
(反映在 $PSCulture
、Get-Culture
和 [cultureinfo]::currentCulture
)
- 这个problem has been reported on UserVoice.
- 请注意,PowerShell Core 不受影响(但不支持
Set-Culture
)。
此答案的其余部分讨论了一般情况下持续设置当前用户的文化,而不考虑错误。
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.