改变当前文化

Posted

技术标签:

【中文标题】改变当前文化【英文标题】:Change current culture 【发布时间】:2014-02-24 13:17:05 【问题描述】:

大家好,

首先:我对强大的 powershell 世界很陌生 - 其次:我的问题是我想改变当前的文化来编辑 Excel 工作簿。

导致我对这个话题提出一个新问题的情况(是的,我知道有很多关于“”和“如何使用 powershell 编辑 excel 工作簿”的类似话题,别担心)是不是很多答案(如this)是一个很好的起点——但它对我不起作用!

所以这是我的实际问题: 我有一个脚本说

function Set-Culture ([System.Globalization.CultureInfo] $culture)

    [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
    [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture


Get-Culture
Set-Culture('en-us')
Get-Culture

结果显示

LCID             Name             DisplayName                                                                                                      
----             ----             -----------                                                                                                      
3079             de-AT            German (Austria)                                                                                                 
3079             de-AT            German (Austria)

但是(正如您从上面看到的)我希望将当前的文化更改为 en-US。我的错在哪里?

【问题讨论】:

【参考方案1】:

如果您使用的是 PowerShell v2,则它是 MTA,这意味着 IIRC 您可以为每个管道调用获取不同的线程。 V1、V3 和 V4 是 STA,但是,我相信 PowerShell 在执行的某些点重置了文化。我相信类似以下的方法会更好:

function Using-Culture
    
    param(
        [Globalization.CultureInfo]$culture = (throw "USAGE: Using-Culture -Culture culture -Script scriptblock"),
        [ScriptBlock]$script = (throw "USAGE: Using-Culture -Culture culture -Script scriptblock")
    )

    $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
    $OldUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
    try 
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture        
        Invoke-Command $script    
        
    finally         
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture        
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture    
        

【讨论】:

以上是关于改变当前文化的主要内容,如果未能解决你的问题,请参考以下文章

这是暂时改变当前线程文化的好方法吗?

更改 Powershell 会话的当前文化,特定于 v3.0+

如何返回用户在 PC 中使用的当前文化

当前文化在 WinRT 中是错误的

什么是不变文化?

使用 ASPNETCore 1.1.1 本地化默认将当前文化设置为浏览器文化