РАЗДЕЛ
about_Script_Internationalization
КРАТКОЕ ОПИСАНИЕ
Описание возможностей интернационализации скриптов Windows
PowerShell 2.0, позволяющих скриптам выводить пользователям
сообщения и команды на языке их пользовательского интерфейса.
ПОЛНОЕ ОПИСАНИЕ
Возможности интернационализации скриптов Windows PowerShell
позволяют более качественно обслуживать пользователей из разных
стран мира, выводя справочную информацию и сообщения для скриптов
и функций на языке пользовательского интерфейса.
При запуске средства интернационализации скриптов запрашивают
значение региональных параметров пользовательского интерфейса
операционной системы, импортируют соответствующие переведенные
текстовые строки и отображают их пользователю. Раздел Data
позволяет хранить текстовые строки отдельно от кода, чтобы их
можно было легко найти и извлечь. Новый командлет ConvertFrom-Stri
ngData преобразует текстовые строки в напоминающие словарь
хэш-таблицы для упрощения перевода.
Средства Windows PowerShell 2.0, используемые для интернационализа
ции скриптов, не поддерживаются PowerShell 1.0. Скрипты с этими
средствами не будут работать в Windows PowerShell 1.0, если не
внести в них изменения.
Для поддержки интернационализации текста справки в Windows
PowerShell 2.0 имеются следующие средства.
-- Раздел Data, позволяющий отделять текстовые строки от
кодовых инструкций. Дополнительные сведения о разделе Data
см. в разделе about_Data_Sections.
-- Новые автоматические переменные $PSCulture и $PSUICulture.
В переменной $PSCulture сохраняется имя языка
пользовательского интерфейса, используемого системой для
таких элементов, как дата, время и валюта. В переменной
$PSUICulture сохраняется имя языка пользовательского интерфейса,
используемого системой для таких элементов, как меню и текстовые строки.
-- Командлет ConvertFrom-StringData преобразует для упрощения
перевода текстовые строки в напоминающие словарь
хэш-таблицы. Дополнительные сведения см. в описании
командлета ConvertFrom-StringData.
-- Файл нового типа PSD1, где хранятся переведенные текстовые
строки. Файлы PSD1 хранятся в подкаталогах соответствующих
языков в каталоге скрипта.
-- Командлет Import-LocalizedData, позволяющий импортировать
переведенные текстовые строки для указанного языка в скрипт
в среде выполнения. Это командлет распознает и импортирует
строки на любом языке, поддерживаемом Windows.
Дополнительные сведения см. в разделе Import-LocalizedData.
РАЗДЕЛ DATA. Сохранение строк по умолчанию
Раздел Data в скрипте используется для сохранения текстовых
строк на установленном по умолчанию языке.
Строки следует располагать парами "ключ-значение" в автономной
строке. Каждая пара "ключ-значение" должна находиться на
отдельной строке. Если используются комментарии, они должны
находиться на отдельных строках.
Командлет ConvertFrom-StringData преобразует пары "ключ-значение"
в автономной строке в хэш-таблицу, напоминающую словарь,
которая сохраняется внутри значения переменной раздела Data.
В следующем примере в разделе Data скрипта 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. Файлы сохраняются в подкаталогах
каталога скрипта с именами региональных параметров в следующем
формате:
<язык>-<регион>
Примеры: ru-RU, ar-SA, zh-Hans
Например, если скрипт World.ps1 сохранен в каталоге C:\Scripts,
нужно создать структуру каталогов с файлами, выглядящую примерно так:
C:\Scripts
C:\Scripts\World.ps1
C:\Scripts\ru-RU\WorldPSD1
C:\Scripts\ar-SA\WorldPSD1
C:\Scripts\zh-CN\WorldPSD1
...
Файл World.psd1 в подкаталоге ru-RU каталога скрипта может
содержать следующую инструкцию:
ConvertFrom-StringData @'
helloWorld = Hello, World (на русском).
errorMsg1 = You cannot leave the user name field blank (на русском).
promptMsg = Please enter your user name (на русском).
'@
Аналогично, файл World.psd1 в подкаталоге ar-SA каталога скрипта
может содержать следующую инструкцию:
ConvertFrom-StringData @'
helloWorld = Hello, World (на арабском).
errorMsg1 = You cannot leave the user name field blank (на арабском).
promptMsg = Please enter your user name (на арабском).
'@
IMPORT-LOCALIZEDDATA: Динамическое извлечение переведенных строк
Для извлечения строк на языке пользовательского интерфейса
текущего пользователя используйте командлет Import-LocalizedData.
Командлет Import-LocalizedData находит значение автоматической
переменной $PSUICulture и импортирует содержимое файлов
<имя_скрипта>.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, заменяя любые строки по умолчанию,
которые могут быть определены в разделе Data скрипта World.ps1.
В результате, когда скрипт использует переменную $msgTable для
вывода сообщений пользователю, эти сообщения отображаются на
арабском языке.
Например, следующий скрипт выводит сообщение Please enter your
user name на арабском языке:
if (!($username)) { $msgTable.promptMsg }
Если командлет Import-LocalizedData не может найти файл PSD1,
соответствующий значению переменной $PSUIculture, значение
$msgTable не заменяется и при вызове $msgTable.promptMsg
выводятся строки на установленном по умолчанию языке (английский
(США)).
ПРИМЕР
В этом примере показано, как средства интернационализации
используются в скрипте для показа пользователям дня недели на
языке, установленном на компьютере.
Ниже приведено полное содержание файла скрипта Sample1.ps1.
Скрипт начинается с раздела Data с именем Day ($Day), содержащего
команду ConvertFrom-StringData. Выражение, отправленное
ConvertFrom-StringData, представляет собой автономную строку,
содержащую имена дней на установленном по умолчанию языке
(Английский, США) в парах вида "ключ-значение". Командлет
ConvertFrom-StringData преобразует пары "ключ-значение" из
автономной строки в хэш-таблицу и сохраняет их в значении
переменной $Day.
Команда Import-LocalizedData импортирует содержимое файла PSD1 в
каталог, соответствующий значению автоматической переменной
$PSUICulture, а затем сохраняет его в переменной $Day, заменяя
значения $Day, определенные в разделе Data.
Остальные команды загружают строки в массив и выводят их.
$Day = DATA {
# culture=\\"en-US\\"
ConvertFrom-StringData @'
messageDate = Today is
d1 = Monday
d2 = Tuesday
d3 = Wednesday
d4 = Thursday
d5 = Friday
d6 = Saturday
d7 = Sunday
'@
}
Import-LocalizedData -BindingVariable Day
# Создание массива дней недели.
$a = $Day.d1, $Day.d2, $Day.d3, $Day.d4, $Day.d5, $Day.d6, $Day.d7
# Получение дня недели в виде числа (Monday = 1).
# Обращение к индексу массива $a для получения названия дня недели.
# Форматирование строки для построения предложения.
"{0} {1}" -f $Day.messageDate, $a[(get-date -uformat %u)] | Out-Host
Файлы PSD1, поддерживающие скрипт, сохраняются в подкаталогах
каталога скрипта, имена которых соответствуют значениям
переменной $PSUICulture.
The following is a complete listing of .\ru-RU\sample1.psd1:
# culture=\\"ru-RU\\"
ConvertFrom-StringData @'
messageDate = Today is
d1 = Monday (на русском языке)
d2 = Tuesday (на русском языке)
d3 = Wednesday (на русском языке)
d4 = Thursday (на русском языке)
d5 = Friday (на русском языке)
d6 = Saturday (на русском языке)
d7 = Sunday (на русском языке)
'@
При запуске скрипта Sample.ps1 в системе, где переменная
$PSUICulture имеет значение ru-RU, выводится следующее:
Today is Friday (на русском языке)
СМ. ТАКЖЕ
about_Data_Sections
about_Automatic_Variables
about_Hash_Tables
about_Quoting_Rules
ConvertFrom-StringData
Import-LocalizedData