[PS] 2.0の国際化対応機能
PowerShell2.0でスクリプトの国際化機能が追加されています。どのような機能かと云えば、変数に格納するデータを言語識別子フォルダ(ja-JP、en-USとか)に格納しておくことで、UICultuteによって自動的に適用するデータを選択するというものです。
具体例を使って説明しましょう。以下に実行したいスクリプトファイル(world.ps1)を示します。
# 変数msgTableのデフォルト定義
Data msgTable {
ConvertFrom-StringData @'
helloWorld = Hello, World
errorMsg = You cannot leave the username field blank.
promptMsg = Please enter your username.
'@
}
param ($language)
Import-LocalizedData -BindingVariable msgTable -Culture $language
$msgTable
次に日本語のデータを定義したファイル(world.psd1)をja-JPフォルダに配置します。
ConvertFrom-StringData @'
helloWorld = こんにちは。
errorMsg = ユーザー名は空白にできません。
promptMsg = ユーザー名を入力してください。
'@
更に内容を英語にしたファイル(world.psd1)をen-USフォルダに配置します。そして以下のように実行するとカルチャによってデータの内容が切り替わります。
PS (1) >.\world ja-JP #日本語を指定
Name Value
---- -----
promptMsg ユーザー名を入力してください。
helloWorld こんにちは。
errorMsg ユーザー名は空白にできません。
PS (2) >.\world en-US #英語を指定
Name Value
---- -----
promptMsg Please enter your username.
helloWorld Hello, World
errorMsg You cannot leave the username field blank.
指定したカルチャによって、データの内容が切り替わっているのを確認することができます。PowerShell 2.0では、現在のカルチャを判断するために$UICultureシェル変数が追加されています。それでは、ここまでに出てきた新しいキーワードやコマンドレットを説明していきます。
- Dataキーワード
指定した変数名にスクリプトブロックの実行結果を格納するデータ定義用のキーワードです。スクリプトブロックには、ConverFrom-StringDataコマンドレットの他にif文や一部のシェル変数を利用することができます。 - ConverFrom-StringDataコマンドレット
文字列で指定した「名前=値」のペアからハッシュテーブルを作成するコマンドレットです。 - Import-LocalizedDataコマンドレット
指定した変数に$UICultureに一致するデータファイルの内容を設定します。実際の動作は、Dataキーワードと同じで、データファイルの中身がスクリプトブロックの中身となります。 - デフォルトのデータ
スクリプトファイルの中に記述したDataキーワードがデフォルトの値となります。が、Import-LocalizedDataコマンドレットを指定する場合は、すべてのデータが言語識別サブフォルダに無ければなりません。つまりスクリプトファイル中のDataキーワードは、意味がなくなります。
このような記述を行うことで変数定義をまとめたり、ローカライズをできるようにしたのが、PowerShell2.0の国際化対応となります。