【发布时间】:2020-07-15 07:03:11
【问题描述】:
在我修补与问题Fully change language for the current PowerShell session 的目标相关的 PS 5.1 期间 我观察到一个“奇怪”的行为:
> [system.threading.thread]::currentthread.currentculture ; [system.threading.thread]::currentthread.currentuiculture ;
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
1033 en-US English (United States)
> function Set-CultureWin([System.Globalization.CultureInfo] $culture) { [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture ; [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture } ; Set-CultureWin es-ES ; [system.threading.thread]::currentthread.currentculture ; [system.threading.thread]::currentthread.currentuiculture ;
LCID Name DisplayName
---- ---- -----------
3082 es-ES Español (España)
3082 es-ES Español (España)
> [system.threading.thread]::currentthread.currentculture ; [system.threading.thread]::currentthread.currentuiculture ;
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
1033 en-US English (United States)
(上面的函数来自here)。
将[system.threading.thread]::currentthread. 替换为[cultureinfo]:: 在任何地方都会产生完全相同的结果。
我觉得奇怪的是:
-
我得出结论,“线程”(当前线程)的边界似乎是执行命令行。
尽管如此,here 它被引用为“会话范围(非持久)解决方案”(响应其 OP Temporarily change powershell language to English?)。 该答案甚至发布了一个包装函数来限制对执行命令的更改范围。
该信息显然反对this,它声明“[Threading.Thread]::CurrentThread.CurrentUICulture只影响当前的单行”(与我的结论一致)。 -
即使
Set-Culture仅在启动新会话后生效,我也可以立即为那个“线程”获得Culture的更改。
我可能会得出这样的结论。
这两点如何合理化? (我欢迎权威文档)。
【问题讨论】:
标签: powershell scope culture currentculture currentuiculture