Welcome to MSDN Blogs Sign in | Join | Help
[PS] 2.0の国際化対応機能

 PowerShell2.0でスクリプトの国際化機能が追加されています。どのような機能かと云えば、変数に格納するデータを言語識別子フォルダ(ja-JP、en-USとか)に格納しておくことで、UICultuteによって自動的に適用するデータを選択するというものです。

図12. 国際化のフォルダ構造

具体例を使って説明しましょう。以下に実行したいスクリプトファイル(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シェル変数が追加されています。それでは、ここまでに出てきた新しいキーワードやコマンドレットを説明していきます。

  1. Dataキーワード
    指定した変数名にスクリプトブロックの実行結果を格納するデータ定義用のキーワードです。スクリプトブロックには、ConverFrom-StringDataコマンドレットの他にif文や一部のシェル変数を利用することができます。
  2. ConverFrom-StringDataコマンドレット
    文字列で指定した「名前=値」のペアからハッシュテーブルを作成するコマンドレットです。
  3. Import-LocalizedDataコマンドレット
    指定した変数に$UICultureに一致するデータファイルの内容を設定します。実際の動作は、Dataキーワードと同じで、データファイルの中身がスクリプトブロックの中身となります。
  4. デフォルトのデータ
    スクリプトファイルの中に記述したDataキーワードがデフォルトの値となります。が、Import-LocalizedDataコマンドレットを指定する場合は、すべてのデータが言語識別サブフォルダに無ければなりません。つまりスクリプトファイル中のDataキーワードは、意味がなくなります。

このような記述を行うことで変数定義をまとめたり、ローカライズをできるようにしたのが、PowerShell2.0の国際化対応となります。

Posted: Saturday, January 19, 2008 2:53 PM by shozoa
Filed under: ,

Comments

No Comments

Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker