sthInvokeUsingCultureFunctions.ps1

# .ExternalHelp sthInvokeUsingCulture.help.xml
function Invoke-sthUsingCulture
{
    Param(
        [System.Globalization.CultureInfo]$Culture,
        [ScriptBlock]$ScriptBlock
    )

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

    try
    {
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $Culture
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = $Culture
        Invoke-Command -ScriptBlock $ScriptBlock
    }
    finally
    {
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $CurrentCulture
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = $CurrentUICulture
    }
}

# .ExternalHelp sthInvokeUsingCulture.help.xml
function Enter-sthCulture
{
    Param(
        [System.Globalization.CultureInfo]$Culture
    )

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

    $CurrentPrompt = Get-Content -Path function:/prompt

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

    $PromptLine = "`"[`$(`$Culture.Name)] PS `$(`$executionContext.SessionState.Path.CurrentLocation)`$('>' * (`$nestedPromptLevel + 1)) `""
    $Prompt = [scriptblock]::Create($PromptLine)
    Set-Content -Path function:/prompt -Value $Prompt

    $host.EnterNestedPrompt()

    Set-Content -Path function:/prompt -Value $CurrentPrompt

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

# .ExternalHelp sthInvokeUsingCulture.help.xml
function Set-sthCulture
{
    Param(
        [System.Globalization.CultureInfo]$Culture
    )

    if (!$Script:_defaultCulture)
    {
        $Script:_defaultCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
    }
    if (!$Script:_defaultUICulture)
    {
        $Script:_defaultUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
    }

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

# .ExternalHelp sthInvokeUsingCulture.help.xml
function Reset-sthCulture
{
    if ($Script:_defaultCulture)
    {
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $Script:_defaultCulture
        Remove-Variable -Name _defaultCulture -Scope Script
    }
    if ($Script:_defaultUICulture)
    {
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = $Script:_defaultUICulture
        Remove-Variable -Name _defaultUICulture -Scope Script
    }
}