# encoding: ascii
# api: powershell
# title:
# description: A cmdlet to run a script/scriptblock under a different culture (language). Useful for testing localization.
# version: 0.1
# type: function
# license: CC0
# function: Using-Culture
# x-poshcode-id: 4120
# x-archived: 2013-04-24T09:15:15
#
#
function Using-Culture
{
<#
.SYNOPSIS
Runs a PowerShell script under a different locale to test localization features.
.DESCRIPTION
Runs a PowerShell script under a different locale to test localization features.
Copied from http://rkeithhill.wordpress.com/2009/10/21/windows-powershell-2-0-string-localization/
and converted to a Cmdlet including help comments.
.LINK
Import-LocalizedData
Convert-FromStringData
http://rkeithhill.wordpress.com/2009/10/21/windows-powershell-2-0-string-localization/
.PARAMETER Culture
The culture (language) to run the script in.
.PARAMETER Script
The scriptblock or script (wrapped in a scriptblock) to run.
.EXAMPLE
PS C:\> Using-Culture fr-FR { .\test.ps1 }
Runs the script test.ps1 under French language settings.
#>
[CmdletBinding()]
Param([Parameter(Mandatory = $true, HelpMessage = 'The culture (language) to run the script in.')]
[ValidateNotNull()]
[System.Globalization.CultureInfo]
$Culture,
[Parameter(Mandatory = $true, HelpMessage = 'The scriptblock or wrapped script to run.')]
[ValidateNotNull()]
[ScriptBlock]
$Script
)
$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
}
}