当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于脚本国际化

作者:精品下载站 日期:2024-12-14 02:18:32 浏览:13 分类:玩电脑

关于脚本国际化


简短描述

描述脚本国际化功能,使脚本可以轻松地用用户界面 (UI) 语言向用户显示消息和指令。

详细描述

PowerShell 脚本国际化功能允许您通过以用户语言显示帮助和用户消息来更好地为世界各地的用户提供服务。

脚本国际化功能在执行期间查询操作系统的 UI 区域性,导入适当的翻译文本字符串,并将其显示给用户。数据部分允许您将文本字符串与代码分开存储,以便轻松识别和提取它们。新的 cmdlet ConvertFrom-StringData 将文本字符串转换为类似字典的哈希表以方便翻译。

为了支持国际化帮助文本,PowerShell 包含以下功能:

  • 将文本字符串与代码指令分开的数据部分。有关数据部分的更多信息,请参阅 about_Data_Sections。

  • 新的自动变量 $PSCulture$PSUICulture$PSCulture 存储系统上用于日期、时间和货币等元素的 UI 语言的名称。 $PSUICulture 变量存储系统上用于用户界面元素(例如菜单和文本字符串)的 UI 语言的名称。

  • cmdlet ConvertFrom-StringData,可将文本字符串转换为类似字典的哈希表以方便翻译。有关详细信息,请参阅ConvertFrom-StringData。

  • 新的文件类型 .psd1,用于存储翻译后的文本字符串。 .psd1 文件存储在脚本目录的特定于语言的子目录中。

  • cmdlet Import-LocalizedData,用于在运行时将指定语言的翻译文本字符串导入到脚本中。此 cmdlet 可识别并导入任何 Windows 支持的语言的字符串。有关详细信息,请参阅导入本地化数据。

数据部分:存储默认字符串

使用脚本中的数据部分以默认语言存储文本字符串。将字符串排列在此处字符串中的键/值对中。每个键/值对必须位于单独的行上。如果包含注释,则注释必须位于单独的行中。

ConvertFrom-StringData cmdlet 将此处字符串中的键/值对转换为类似字典的哈希表,该哈希表存储在数据部分变量的值中。

在以下示例中,World.ps1 脚本的数据部分包含脚本的美国英语 (en-US) 提示消息集。 ConvertFrom-StringData cmdlet 将字符串转换为哈希表并将它们存储在 $msgtable 变量中。

$msgTable = Data {
    #culture="en-US"
    ConvertFrom-StringData @'
    helloWorld = Hello, World.
    errorMsg1 = You cannot leave the user name field blank.
    promptMsg = Please enter your user name.
'@
}

有关此处字符串的更多信息,请参阅 about_Quoting_Rules。

PSD1 文件:存储翻译的字符串

将每种 UI 语言的脚本消息保存在单独的文本文件中,其名称与脚本相同,文件扩展名为 .psd1。将文件存储在脚本目录的子目录中,并使用以下格式的区域性名称:

<language>-<region>

示例:de-DE、ar-SA 和 zh-Hans

例如,如果 World.ps1 脚本存储在 C:\Scripts 目录中,您将创建一个类似于以下内容的文件目录结构:

C:\Scripts
C:\Scripts\World.ps1
C:\Scripts\de-DE\World.psd1
C:\Scripts\ar-SA\World.psd1
C:\Scripts\zh-CN\World.psd1
...

脚本目录的 de-DE 子目录中的 World.psd1 文件可能包含以下语句:

ConvertFrom-StringData -StringData @'
helloWorld = Hallo, Welt.
errorMsg1 = Das Feld Benutzername darf nicht leer sein.
promptMsg = Geben Sie Ihren Benutzernamen ein.
'@

同样,脚本目录的 ar-SA 子目录中的 World.psd1 文件可能包含以下语句:

ConvertFrom-StringData -StringData @'
helloWorld = مرحبًا أيها العالَم
errorMsg1 = لا يمكنك ترك حقل اسم المستخدم فارغًا
promptMsg = يرجى إدخال اسم المستخدم الخاص بك
'@

Import-LocalizedData:动态检索翻译字符串

要检索当前用户的 UI 语言的字符串,请使用 Import-LocalizedData cmdlet。

Import-LocalizedData 查找 $PSUICulture 自动变量的值并导入子目录中 <script;-name>.psd1 文件的内容与 $PSUICulture 值匹配。然后,它将导入的内容保存在 BindingVariable 参数值指定的变量中。

Import-LocalizedData -BindingVariable msgTable

例如,如果 Import-LocalizedData 命令出现在 C:\Scripts\World.ps1 脚本中,并且 $PSUICulture 的值为“ ar-SA", Import-LocalizedData 找到以下文件:

C:\Scripts\ar-SA\World.psd1

然后,它将文件中的阿拉伯文本字符串导入到 $msgTable 变量中,替换可能在 World.ps1 脚本的数据部分中定义的任何默认字符串。

因此,当脚本使用 $msgTable 变量显示用户消息时,消息将以阿拉伯语显示。

例如,以下脚本以阿拉伯语显示“请输入您的用户名”消息:

if (!($username)) { $msgTable.promptMsg }

如果 Import-LocalizedData 找不到与 $PSUIculture 的值匹配的 .psd1 文件,则为 $msgTable 的值> 不会被替换,并且对 $msgTable.promptMsg 的调用会显示后备 en-US 字符串。

示例

此示例演示如何在脚本中使用脚本国际化功能,以计算机上设置的语言向用户显示一周中的某一天。

以下是 Sample1.ps1 脚本文件的完整列表。

该脚本以名为 Day ($Day) 的数据部分开始,其中包含 ConvertFrom-StringData 命令。提交到 ConvertFrom-StringData 的表达式是一个此处字符串,其中包含默认 UI 区域性 en-US 中的键/值对形式的日期名称。 ConvertFrom-StringData cmdlet 将此处字符串中的键/值对转换为哈希表,然后将其保存在 $Day 变量的值中。

Import-LocalizedData 命令导入目录中与 $PSUICulture 自动变量的值匹配的 .psd1 文件的内容,然后保存它位于 $Day 变量中,替换数据部分中定义的 $Day 值。

其余命令将字符串加载到数组中并显示它们。

$Day = Data {
#culture="en-US"
ConvertFrom-StringData -StringData @'
    messageDate = Today is
    d0 = Sunday
    d1 = Monday
    d2 = Tuesday
    d3 = Wednesday
    d4 = Thursday
    d5 = Friday
    d6 = Saturday
'@
}

Import-LocalizedData -BindingVariable Day

#Build an array of weekdays.
$a = $Day.d0, $Day.d1, $Day.d2, $Day.d3, $Day.d4, $Day.d5, $Day.d6

# Get the day of the week as a number (Monday = 1).
# Index into $a to get the name of the day.
# Use string formatting to build a sentence.

"{0} {1}" -f $Day.messageDate, $a[(Get-Date -UFormat %u)] | Out-Host

支持脚本的 .psd1 文件保存在脚本目录的子目录中,其名称与 $PSUICulture 值匹配。

以下是 .\de-DE\sample1.psd1 的完整列表:

# culture="de-DE"
ConvertFrom-StringData @'
    messageDate = Heute ist
d0 = Sonntag
d1 = Montag
d2 = Dienstag
d3 = Mittwoch
d4 = Donnerstag
d5 = Freitag
d6 = Samstag
'@

因此,当您在 $PSUICulture 值为 de-DE 的系统上运行 Sample.ps1 时,脚本的输出为:

Heute ist Freitag

参见

  • about_Data_Sections
  • about_Automatic_Variables
  • about_Hash_Tables
  • about_引用_规则
  • Import-LocalizedData
  • ConvertFrom-StringData

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯