PowerShell HelpFile - about_script_internationalization
 記事記号:[me1580] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    about_Script_Internationalization

簡易説明
    Windows PowerShell 2.0 のスクリプトの国際化機能について説明します。この機能
    は、ユーザーに対するスクリプトのメッセージや指示を簡単にユーザー インターフ
    ェイス (UI) の言語で表示できるようにする機能です。


詳細説明
    Windows PowerShell のスクリプトの国際化機能は、スクリプトや関数のヘルプやユ
    ーザー向けメッセージをユーザーの UI 言語で表示することで、世界中のユーザーの
    利便性を高めます。
    
    スクリプトの国際化機能は、オペレーティング システムの UI のカルチャを実行中
    に照会し、対応する翻訳済みのテキスト文字列をインポートしてユーザーに表示する
    機能です。Data セクションを使用すると、テキスト文字列を容易に識別および抽出
    できるようにコードから分離することができます。新しいコマンドレット ConvertFr
    om-StringData を使用することにより、テキスト文字列を翻訳しやすいよう、ディク
    ショナリに似たハッシュ テーブルへと変換できます。

    スクリプトの国際化で使用される Windows PowerShell 2.0 の機能は、Windows Powe
    rShell 1.0 ではサポートされていません。これらの機能を含むスクリプトは、修正
    を加えなければ Windows PowerShell 1.0 で実行できません。

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

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

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

       -- テキスト文字列を翻訳しやすいよう、ディクショナリに似たハッシュ テーブ
          ルへと変換する ConvertFrom-StringData コマンドレット。詳細については、
          「ConvertFrom-StringData」を参照してください。

       -- 翻訳されたテキスト文字列を格納する新しい .psd1 ファイル。.psd1 ファイ
          ルは、スクリプト ディレクトリの言語に固有のサブディレクトリに格納され
          ます。
    
       -- 実行時に指定された言語の翻訳済みのテキスト文字列をスクリプトにインポー
          トする Import-LocalizedData コマンドレット。このコマンドレットは、Wind
          ows でサポートされるあらゆる言語の文字列を認識し、インポートします。詳
          細については、「Import-LocalizedData」を参照してください。


 Data セクション: 既定の文字列の格納
 
     スクリプトの Data セクションは、既定の言語のテキスト文字列を格納するために
     使用します。文字列をキーと値のペアの形式で here-string に定義します。キーと
     値のペアは 1 行に 1 つずつ記述する必要があります。コメントを含める場合は、
     コメントを独立した行に記述する必要があります。

     ConvertFrom-StringData コマンドレットは、here-string 内のキーと値のペアを、
     ディクショナリに似たハッシュ テーブルに変換して Data セクションの変数の値に
     格納します。

     次の例では、World.ps1 スクリプトの Data セクションに、スクリプトのプロンプト
     メッセージの English-United States (en-US) セットが指定されています。Convert
     From-StringData コマンドレットは、文字列をハッシュ テーブルに変換して $msgta
     ble 変数に格納します。

	$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-string の詳細については、「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 (ドイツ語表記).
	    errorMsg1 = You cannot leave the user name field blank (ドイツ語表記).
            promptMsg = Please enter your user name (ドイツ語表記).
	'@


    同様に、スクリプト ディレクトリの ar-SA サブディレクトリに格納されている Wor
    ld.psd1 ファイルは、次のようなステートメントを含みます。


    	ConvertFrom-StringData @'
	    helloWorld = Hello, World (アラビア語表記).
	    errorMsg1 = You cannot leave the user name field blank (アラビア語表記).
            promptMsg = Please enter your user name (アラビア語表記).
	'@


 IMPORT-LOCALIZEDDATA: 翻訳された文字列の動的な取得

    現在のユーザーの UI 言語に対応する文字列を取得するには、Import-LocalizedData 
    コマンドレットを使用します。

    Import-LocalizedData は、$PSUICulture 自動変数の値を調べ、$PSUICulture 値が
    一致するサブディレクトリ内の <script-name>.psd1 ファイルの内容をインポートし
    ます。次に、インポートした内容を、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 スクリプトの Data セクションに定義されている既定の文字列を
    置き換えます。

    その結果、スクリプト内の $msgTable 変数を使用してユーザー メッセージを表示す
    ると、アラビア語のメッセージが表示されます。

    たとえば、次のスクリプトは、"Please enter your user name" に対応するアラビア
    語のメッセージを表示します。

	if (!($username)) { $msgTable.promptMsg }
    
    Import-LocalizedData が $PSUIculture の値に一致する .psd1 ファイルを見つけら
    れなかった場合、$msgTable の値は置き換えられません。$msgTable.promptMsg を呼
    び出すと、フォールバック en-US 文字列が表示されます。



 例

    この例では、スクリプト内でスクリプトの国際化機能を使用して、コンピューター上
    で設定されている言語で曜日をユーザーに表示します。
     
    ここに示すのは、Sample1.ps1 スクリプトの完全な内容です。

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

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

    残りのコマンドは、文字列を配列に読み込んで表示するコマンドです。
   
        $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 ファイルは、スクリプト ディレクトリ内で $PSUIC
    ulture 値と一致する名前を持つサブディレクトリに格納されています。

    \ja-JP\sample1.psd1 の完全な内容を次に示します。

        # culture="en-US"
        ConvertFrom-StringData @'
            messageDate = Today is 
            d1 = Monday (日本語表記)
            d2 = Tuesday (日本語表記)
            d3 = Wednesday (日本語表記)
            d4 = Thursday (日本語表記)
            d5 = Friday (日本語表記)
            d6 = Saturday (日本語表記)
            d7 = Sunday (日本語表記)
        '@

    $PSUICulture の値が ja-JP に設定されているシステム上で Sample.ps1 を実行した
    場合、スクリプトの出力は次のようになります。
	

	Today is Friday (日本語表記)


関連項目
    about_Data_Sections
    about_Automatic_Variables
    about_Hash_Tables
    about_Quoting_Rules
    ConvertFrom-StringData
    Import-LocalizedData       
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_script_internationalization
ご利用数: 1918565
感想・要望・問い合わせは こちら