トピック about_Script_Internationalization 簡易説明 Windows PowerShell 2.0 のスクリプトの国際化機能について説明します。この機能は、ユーザーに 対するスクリプトのメッセージや指示を簡単にユーザー インターフェイス (UI) の言語で表示できる ようにする機能です。 詳細説明 Windows PowerShell のスクリプトの国際化機能は、スクリプトや関数のヘルプやユーザー向けメッ セージをユーザーの UI 言語で表示することで、世界中のユーザーの利便性を高めます。 スクリプトの国際化機能は、オペレーティング システムの UI のカルチャを実行中に照会し、対応 する翻訳済みのテキスト文字列をインポートしてユーザーに表示する機能です。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 は、シ ステム上で日付、時刻、通貨などの要素に使用されている UI 言語の名前を格納します。 $PSUICulture 変数は、システム上でメニューやテキスト文字列などのユーザー インターフェ イス要素に使用されている UI 言語の名前を格納します。 -- テキスト文字列を翻訳しやすいよう、ディクショナリに似たハッシュ テーブルへと変換す る ConvertFrom-StringData コマンドレット。詳細については、「ConvertFrom- StringData」を参照してください。 -- 翻訳されたテキスト文字列を格納する新しい .psd1 ファイル。.psd1 ファイルは、スクリ プト ディレクトリの言語に固有のサブディレクトリに格納されます。 -- 実行時に指定された言語の翻訳済みのテキスト文字列をスクリプトにインポートする Import-LocalizedData コマンドレット。このコマンドレットは、Windows でサポートされる あらゆる言語の文字列を認識し、インポートします。詳細については、「Import- LocalizedData」を参照してください。 Data セクション: 既定の文字列の格納 スクリプトの Data セクションは、既定の言語のテキスト文字列を格納するために使用します。 文字列をキーと値のペアの形式で here-string に定義します。キーと値のペアは 1 行に 1 つ ずつ記述する必要があります。コメントを含める場合は、コメントを独立した行に記述する必要が あります。 ConvertFrom-StringData コマンドレットは、here-string 内のキーと値のペアを、ディクショ ナリに似たハッシュ テーブルに変換して Data セクションの変数の値に格納します。 次の例では、World.ps1 スクリプトの Data セクションに、スクリプトのプロンプト メッセージの English-United States (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-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 サブディレクトリに格納されている World.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 ファイルは、スクリプト ディレクトリ内で $PSUICulture 値と一致 する名前を持つサブディレクトリに格納されています。 \ja-JP\sample1.psd1 の完全な内容を次に示します。 # culture="ja-JP" 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