about_Script_Internationalization

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

トピック

about_Script_Internationalization

概要

スクリプトがユーザーに対してユーザー インターフェイス (UI) 言語でメッセージと手順を表示することを容易にする Windows PowerShell® 2.0 のスクリプト国際化機能について説明します。

詳細説明

Windows PowerShell スクリプト国際化機能は、ユーザーの UI 言語でスクリプトと関数のヘルプおよびユーザー メッセージを表示することで、世界中のユーザー満足度を高めることができます。

スクリプト国際化機能は実行中にオペレーティング システムの UI カルチャをクエリし、適切な翻訳されたテキスト文字列をインポートして、それらをユーザーに表示します。データ セクションでは、コードとは別にテキスト文字列を格納することができるため、簡単に識別および抽出ができます。新しいコマンドレットである ConvertFrom-StringData は、翻訳を容易にするために、テキスト文字列をディクショナリに似たハッシュ テーブルに変換します。

スクリプトの国際化で使用される Windows PowerShell 2.0 の機能は Windows PowerShell 1.0 ではサポートされていません。これらの機能が含まれているスクリプトは、変更しない場合、Windows PowerShell 1.0 では実行されません。

国際化のヘルプ テキストをサポートするために、Windows PowerShell 2.0 には次の機能が含まれています。

  • -コード命令からテキスト文字列を分離するデータ セクション。データ セクションの詳細については「about_Data_Sections」を参照してください。

  • -新しい自動変数である $PSCulture および $PSUICulture。$PSCulture は、日付、時刻、通貨などの要素のために、システムで使用する UI 言語の名前を格納します。$PSUICulture 変数は、メニューやテキスト文字列などのユーザー インターフェイス要素のために、システムで使用する UI 言語の名前を格納します。

  • -翻訳を容易にするためにテキスト文字列をディクショナリに似たハッシュ テーブルに変換する新しいコマンドレットである 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 ファイル:翻訳された文字列の格納

各 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 @'
            helloWorld = Hello, World (in German).
            errorMsg1 = You cannot leave the user name field blank (in German).
            promptMsg = Please enter your user name (in German).
        '@

同様に、スクリプト ディレクトリの ar-SA サブディレクトリにある World.psd1 ファイルには、次のステートメントが含まれることがあります。

        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:翻訳された文字列の動的な取得

現在のユーザーの UI 言語で文字列を取得するには、Import-LocalizedData コマンドレットを使用します。ここにセクションの本文を挿入します。

Import-LocalizedData は $PSUICulture 自動変数の値を検索して、$PSUICulture 値に一致するサブディレクトリ内の <script-name>.psd1 ファイルの内容をインポートします。次に、インポートした内容を、BindingVariable パラメーターの値で指定された変数に保存します。

        import-localizeddata -bindingVariable msgTable

たとえば、C:\Scripts\World.ps1 スクリプトに Import-LocalizedData コマンドがあり、$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 スクリプト ファイルの完全な一覧を次に示します。

スクリプトは ConvertFrom-StringData コマンドが含まれる Day ($Day) という名前のデータ セクションで始まります。ConvertFrom-StringData に送信される式は、既定の UI カルチャである en-US の曜日名をキーと値のペアで含むヒア文字列です。ConvertFrom-StringData コマンドレットは、ヒア文字列内のキーと値のペアをハッシュ テーブルに変換し、$Day 変数の値に保存します。

Import-LocalizedData コマンドは、$PSUICulture 自動変数の値と一致するディレクトリ内の .psd1 ファイルの内容をインポートし、$Day 変数に保存して、データ セクションで定義されている $Day の値を置き換えます。

残りのコマンドは、文字列を配列に読み込み、それらを表示します。

        $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)
        '@

その結果、$PSUICulture の値が de-DE であるシステムで Sample.ps1 を実行すると、スクリプトの出力は次のようになります。

        Today is Friday (in German)

関連項目

about_Data_Sections

about_Automatic_Variables

about_Hash_Tables

about_Quoting_Rules

ConvertFrom-StringData

Import-LocalizedData