Поделиться через


about_Script_Internationalization

Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0

РАЗДЕЛ

about_Script_Internationalization

КРАТКОЕ ОПИСАНИЕ

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

ПОДРОБНОЕ ОПИСАНИЕ

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

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

Функции Windows PowerShell 2.0, используемые для интернационализации сценариев, не поддерживаются в Windows 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, в котором хранятся переведенные текстовые строки. PSDd1-файлы хранятся в языковых подкаталогах каталога сценариев.

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

РАЗДЕЛ DATA: ХРАНЕНИЕ СТРОК ПО УМОЛЧАНИЮ

Раздел Data в сценарии позволяет сохранять текстовые строки на языке по умолчанию. Строки следует упорядочить в пары «ключ-значение» в here-строке. Каждая пара «ключ-значение» должна находиться на отдельной строке. Добавляемые комментарии также должны располагаться на отдельных строках.

Командлет ConvertFrom-StringData преобразует пары «ключ-значение» в here-строке в подобную словарю хэш-таблицу, хранящуюся в значении переменной раздела 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.
            '@
        }

Дополнительные сведения о here-строках см. в разделе 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 @'
            helloWorld = Hello, World (in German).
            errorMsg1 = You cannot leave the user name field blank (in German).
            promptMsg = Please enter your user name (in German).
        '@

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

        ConvertFrom-StringData @'
            helloWorld = Hello, World (in Arabic).
            errorMsg1 = You cannot leave the user name field blank (in Arabic).
            promptMsg = Please enter your user name (in Arabic).
        '@

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

Например, следующий сценарий выводит сообщение «Введите имя пользователя» на арабском языке.

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

Если команде LocalizedData не удается найти PSD1-файл, совпадающий со значением переменной $PSUICulture, значение переменной $msgTable не заменяется и при вызове $msgTable.promptMsg отображаются резервные строки en-US.

ПРИМЕР

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

Далее приведен полный листинг файла сценария Sample1.ps1.

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

Команда Import-LocalizedData импортирует содержимое PDS1-файла в каталоге, который соответствует значению автоматической переменной $PSUICulture, а затем сохраняет его в переменной $Day, заменив значения $Day, определенные в разделе Data.

Остальные команды загружают строки в массив и отображают их.

        $Day = DATA {
        # culture=\"en-US\"
        ConvertFrom-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 = Today is 
            d0 = Sunday (in German)
            d1 = Monday (in German)
            d2 = Tuesday (in German)
            d3 = Wednesday (in German)
            d4 = Thursday (in German)
            d5 = Friday (in German)
            d6 = Saturday (in German)
        '@

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

        Today is Friday (in German)

СМ. ТАКЖЕ

about_Data_Sections

about_Automatic_Variables

about_Hash_Tables

about_Quoting_Rules

ConvertFrom-StringData

Import-LocalizedData