实现PowerShell脚本翻译的最佳方法是什么?

时间:2017-03-10 15:53:28

标签: powershell

我正在开发一个需要以2种语言提供的PowerShell脚本。为了让我的生活更轻松,我觉得为每个人创建一个语言文件似乎是一个好主意,并在其中包含字符串,而不是直接在代码中保存文本并维护代码的2个副本。有关如何实现这一点的最佳实践吗?

我现在遇到的障碍是某些字符串需要包含变量,因此我已经遇到了一些问题。我注意到它会在设置字符串时使用变量的值,这对我来说很有意义。

例如,如果我有一个输出错误级别的字符串:

$Strings.ErrorMessage = "Error detected with $Level severity"

然后将$Level设置为任何值,在调用脚本时它不会具有该值。假设在设置$Level之前未设置$Strings.ErrorMessage,输出将如下所示:

Error detected at  severity

有没有办法告诉PowerShell在输出之前获取$ Level变量的当前值?

2 个答案:

答案 0 :(得分:3)

在最佳实践方面,PowerShell自己的帮助系统有一个页面:

Get-Help about_Script_Internationalization

为避免在本地化字符串中扩展变量时出现问题,可以使用格式字符串运算符:

'Error detected with {0} severity' -f $Level

答案 1 :(得分:2)

请参阅about_Script_Internationalizationthis link上的此链接,该示例提供了一个示例:

本地化之前

PSUICultureExample.ps1

[System.Windows.Forms.MessageBox]::Show(
    "This is a small example showing how to localize strings in a PowerShell script.",
    "Hello, World!") | Out-Null

创建两个本地化脚本的代码。

<强>本地化\ PSUICultureExample.psd1

ConvertFrom-StringData @"
MessageTitle = Hello, World!
MessageBody = This is a small example showing how to localize strings in a PowerShell script.
OtherMessage = Hello {0}!
"@

<强>本地化\ ES-ES \ PSUICulture.psd1

ConvertFrom-StringData @"
MessageTitle = ¡Hola mundo!
MessageBody = Este es un pequeño ejemplo que muestra cómo localizar cadenas en un script de PowerShell.
OtherMessage = ¡Hola {0}!
"@

PSUICultureExample.ps1 本地化后

$s = Import-LocalizedData -BaseDirectory (Join-Path -Path $PSScriptRoot -ChildPath Localized)
[System.Windows.Forms.MessageBox]::Show($s.MessageBody, $s.MessageTitle) | Out-Null

然后要在字符串中包含值(插值),你可以这样做:

$ValueToInsert = 'Bob'
$s.OtherMessage -f $ValueToInsert

<强> 修改 文件夹Localized&amp; Localized\es-ES与脚本相关。