次の方法で共有


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 セクションを使用して、テキスト文字列を既定の言語で格納します。 キーと値のペアで文字列を here-string に配置します。 各キーと値のペアは、個別の行に配置する必要があります。 コメントを含める場合、コメントは別々の行に配置する必要があります。

コマンドレットは 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-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
...

World.psd1スクリプト ディレクトリの de-DE サブディレクトリ内のファイルには、次のステートメントが含まれる場合があります。

ConvertFrom-StringData -StringData @'
helloWorld = Hallo, Welt.
errorMsg1 = Das Feld Benutzername darf nicht leer sein.
promptMsg = Geben Sie Ihren Benutzernamen ein.
'@

同様に、スクリプト ディレクトリの World.psd1 ar-SA サブディレクトリ内のファイルには、次のステートメントが含まれる場合があります。

ConvertFrom-StringData -StringData @'
helloWorld = مرحبًا أيها العالَم
errorMsg1 = لا يمكنك ترك حقل اسم المستخدم فارغًا
promptMsg = يرجى إدخال اسم المستخدم الخاص بك
'@

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

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

Import-LocalizedData は、自動変数の値を $PSUICulture 検索し、その値に一致するサブディレクトリ内のファイルの <script-name>.psd1 内容を $PSUICulture インポートします。 次に、インポートされたコンテンツを BindingVariable パラメーターの値で指定された変数に保存します。

Import-LocalizedData -BindingVariable msgTable

たとえば、スクリプトに Import-LocalizedDataC:\Scripts\World.ps1 コマンドが表示され、 の $PSUICulture 値が "ar-SA" の場合、 Import-LocalizedData 次のファイルが検索されます。

C:\Scripts\ar-SA\World.psd1

次に、ファイルからアラビア語のテキスト文字列を変数に $msgTable インポートし、スクリプトの Data セクションで定義されている既定の文字列を World.ps1 置き換えます。

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

たとえば、次のスクリプトでは、アラビア語で "ユーザー名を入力してください" というメッセージが表示されます。

if (!($username)) { $msgTable.promptMsg }

の値に.psd1一致するファイルが見つからない場合Import-LocalizedData、 の$PSUIculture$msgTable値は置き換えられず、 を$msgTable.promptMsg呼び出すとフォールバック en-US 文字列が表示されます。

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

Sample1.ps1 スクリプト ファイルの完全な一覧を次に示します。

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

コマンドは Import-LocalizedData 、自動変数の値に一致するディレクトリ内の .psd1 ファイルの内容を $PSUICulture インポートし、それを変数に保存し、Data セクションで $Day 定義されている の $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

こちらもご覧ください