about_Script_Internationalization

Краткое описание

Описывает функции интернационализации скриптов, которые упрощают отображение сообщений и инструкций пользователям на языке пользовательского интерфейса.

Подробное описание

Функции интернационализации сценариев PowerShell позволяют лучше обслуживать пользователей по всему миру, отображая справку и сообщения пользователей на языке пользователя.

Функции интернационализации скрипта запрашивают язык и региональные параметры пользовательского интерфейса операционной системы во время выполнения, импортируют соответствующие текстовые строки и отображают их пользователю. В разделе "Данные" можно хранить текстовые строки отдельно от кода, чтобы они легко идентифицировались и извлекаются. Новый командлет ConvertFrom-StringDataпреобразует текстовые строки в хэш-таблицы, такие как словарь, чтобы упростить перевод.

Для поддержки международного текста справки PowerShell включает следующие функции:

  • Раздел данных, разделяющий текстовые строки от инструкций кода. Дополнительные сведения о разделе "Данные" см. в about_Data_Sections.

  • Новые автоматические переменные $PSCulture и $PSUICulture. $PSCulture сохраняет имя языка пользовательского интерфейса, используемого в системе для таких элементов, как дата, время и валюта. Переменная $PSUICulture сохраняет имя языка пользовательского интерфейса, используемого в системе для элементов пользовательского интерфейса, таких как меню и текстовые строки.

  • Командлет, ConvertFrom-StringDataкоторый преобразует текстовые строки в хэш-таблицы, такие как словарь, для упрощения перевода. Дополнительные сведения см. в разделе ConvertFrom-StringData.

  • Новый тип файла, .psd1в который хранятся переведенные текстовые строки. Файлы .psd1 хранятся в подкаталогах, зависящих от языка, в каталоге скриптов.

  • Командлет, Import-LocalizedDataкоторый импортирует текстовые строки для указанного языка в скрипт во время выполнения. Этот командлет распознает и импортирует строки на любом поддерживаемом Windows языке. Дополнительные сведения см. в разделе Import-LocalizedData.

Раздел данных: хранение строк по умолчанию

Используйте раздел "Данные" в скрипте для хранения текстовых строк на языке по умолчанию. Упорядочение строк в парах "ключ-значение" в строке здесь. Каждая пара "ключ-значение" должна находиться в отдельной строке. Если вы включаете примечания, комментарии должны находиться в отдельных строках.

Командлет ConvertFrom-StringData преобразует пары "ключ-значение" в строку здесь в таблицу хэша, например хэш-таблицу, которая хранится в значении переменной раздела данных.

В следующем примере раздел World.ps1 "Данные" скрипта включает набор сообщений запроса на английский США (en-US). ConvertFrom-StringData Командлет преобразует строки в хэш-таблицу и сохраняет их в переменной$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: хранение переведенных строк

Сохраните сообщения скрипта для каждого языка пользовательского интерфейса в отдельных текстовых файлах с тем же именем, что и скрипт и .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
...

Файл World.psd1 в подкаталоге de-DE каталога скрипта может содержать следующую инструкцию:

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

Аналогичным образом World.psd1 файл в подкаталоге ar-SA каталога скриптов может содержать следующую инструкцию:

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

Import-LocalizedData: динамическое извлечение переведенных строк

Чтобы получить строки на языке пользовательского интерфейса текущего пользователя, используйте Import-LocalizedData командлет.

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 не удается найти .psd1 файл, соответствующий значению $PSUIculture, значение $msgTable не заменено, и вызов $msgTable.promptMsg для отображения резервных строк en-US.

Примеры

В этом примере показано, как функции интернационализации скрипта используются в скрипте для отображения дня недели пользователям на языке, заданном на компьютере.

Ниже приведен полный список файла скрипта Sample1.ps1.

Скрипт начинается с раздела данных с именем Day ($Day), который содержит ConvertFrom-StringData команду. Выражение, отправленное ConvertFrom-StringData здесь, представляет собой строку, содержащую имена дней в языках и региональных параметрах пользовательского интерфейса по умолчанию en-US в парах "ключ-значение". Командлет ConvertFrom-StringData преобразует пары "ключ-значение" в строку здесь в хэш-таблицу, а затем сохраняет ее в значении переменной $Day .

Команда Import-LocalizedData импортирует содержимое .psd1 файла в каталоге, который соответствует значению $PSUICulture автоматической переменной, а затем сохраняет его в переменной, заменив значения$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
'@

В результате при запуске Sample.ps1 в системе, в которой значение $PSUICulture de-DE, выходные данные скрипта:

Heute ist Freitag

См. также