РАЗДЕЛ 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