about_Script_Internationalization
簡単な説明
スクリプトがユーザー インターフェイス (UI) 言語でメッセージや指示を簡単に表示できるようにするスクリプトの国際化機能について説明します。
詳細な説明
PowerShell スクリプトの国際化機能を使用すると、ユーザーの言語でヘルプとユーザー メッセージを表示することで、世界中のユーザーにより適切なサービスを提供できます。
スクリプトの国際化機能は、実行中にオペレーティング システムの UI カルチャにクエリを実行し、適切な翻訳されたテキスト文字列をインポートして、ユーザーに表示します。 [データ] セクションでは、コードとは別のテキスト文字列を格納して、簡単に識別および抽出できます。 新しいコマンドレット ConvertFrom-StringData
、翻訳を容易にするために、テキスト文字列を辞書のようなハッシュ テーブルに変換します。
国際ヘルプ テキストをサポートするために、PowerShell には次の機能が含まれています。
テキスト文字列をコード命令から分離する Data セクション。 [データ] セクションの詳細については、「 about_Data_Sections」を参照してください。
新しい自動変数、
$PSCulture
、$PSUICulture
。$PSCulture
は、日付、時刻、通貨などの要素に対してシステムで使用される UI 言語の名前を格納します。$PSUICulture
変数には、メニューやテキスト文字列などのユーザー インターフェイス要素に対してシステムで使用される UI 言語の名前が格納されます。翻訳を容易にするために、テキスト文字列を辞書のようなハッシュ テーブルに変換するコマンドレット
ConvertFrom-StringData
。 詳細については、「 ConvertFrom-StringDataを参照してください。翻訳されたテキスト文字列を格納する新しいファイルの種類 (
.psd1
)。.psd1
ファイルは、スクリプト ディレクトリの言語固有のサブディレクトリに格納されます。指定した言語の翻訳されたテキスト文字列を実行時にスクリプトにインポートするコマンドレット
Import-LocalizedData
。 このコマンドレットは、Windows でサポートされている任意の言語の文字列を認識してインポートします。 詳細については、「 Import-LocalizedDataを参照してください。
[データ] セクション: 既定の文字列の格納
スクリプトの Data セクションを使用して、テキスト文字列を既定の言語で格納します。 キーと値のペアの文字列をここの文字列に配置します。 各キーと値のペアは、個別の行に配置する必要があります。 コメントを含める場合、コメントは別々の行に配置する必要があります。
ConvertFrom-StringData
コマンドレットは、ここの文字列内のキーと値のペアを、Data セクション変数の値に格納されているディクショナリのようなハッシュ テーブルに変換します。
次の例では、World.ps1
スクリプトの Data セクションに、スクリプトのプロンプト メッセージの英語米国 (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-strings の詳細については、 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 -StringData @'
helloWorld = Hallo, Welt.
errorMsg1 = Das Feld Benutzername darf nicht leer sein.
promptMsg = Geben Sie Ihren Benutzernamen ein.
'@
同様に、スクリプト ディレクトリの ar-SA サブディレクトリ内の World.psd1
ファイルには、次のステートメントが含まれる場合があります。
ConvertFrom-StringData -StringData @'
helloWorld = مرحبًا أيها العالَم
errorMsg1 = لا يمكنك ترك حقل اسم المستخدم فارغًا
promptMsg = يرجى إدخال اسم المستخدم الخاص بك
'@
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
スクリプトの Data セクションで定義されている既定の文字列を置き換えます。
その結果、スクリプトが $msgTable
変数を使用してユーザー メッセージを表示すると、メッセージはアラビア語で表示されます。
たとえば、次のスクリプトでは、アラビア語で "ユーザー名を入力してください" というメッセージが表示されます。
if (!($username)) { $msgTable.promptMsg }
Import-LocalizedData
$PSUIculture
の値と一致する.psd1
ファイルが見つからない場合、$msgTable
の値は置き換えられず、$msgTable.promptMsg
の呼び出しにはフォールバック en-US 文字列が表示されます。
例
この例では、スクリプトの国際化機能を使用して、コンピューターに設定されている言語のユーザーに曜日を表示する方法を示します。
Sample1.ps1 スクリプト ファイルの完全な一覧を次に示します。
スクリプトは、 ConvertFrom-StringData
コマンドを含む Day ($Day) という名前の 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 -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 = Heute ist
d0 = Sonntag
d1 = Montag
d2 = Dienstag
d3 = Mittwoch
d4 = Donnerstag
d5 = Freitag
d6 = Samstag
'@
その結果、 $PSUICulture
の値が de-DE であるシステムで Sample.ps1 を実行すると、スクリプトの出力は次のようになります。
Heute ist Freitag
関連項目
PowerShell