主題 about_Script_Internationalization 簡短描述 說明 Windows PowerShell 2.0 的指令碼國際化功能,這些功能可讓指令碼更容易以 使用者介面 (UI) 語言,對使用者顯示訊息和指示。 完整描述 Windows PowerShell 指令碼國際化功能可讓您以使用者的 UI 語言顯示指令碼的說明 和使用者訊息,以便為全球各地的使用者提供更好的服務。 在執行過程中,指令碼國際化功能會查詢作業系統的 UI 文化特性、匯入適當的翻譯 文字字串,並對使用者顯示這些字串。Data 區段可以讓您將文字字串與程式碼分開儲 存,方便您識別及擷取兩者。新的 ConvertFrom-StringData Cmdlet 可將文字字串轉 換成類似字典的雜湊表,以協助翻譯工作的進行。 Windows PowerShell 1.0 不支援指令碼國際化中使用的 Windows PowerShell 2.0 功 能。包含這些功能的指令碼需要修改後才能在 Windows PowerShell 1.0 中執行。 為了支援國際化說明文字,Windows PowerShell 2.0 包含下列功能: -- 將文字字串與程式碼指令分開的 Data 區段。如需 Data 區段的詳細資訊, 請參閱 about_Data_Sections。 -- 新的自動變數 $PSCulture 和 $PSUICulture。$PSCulture 可儲存系統用於日 期、時間和貨幣等元素的 UI 語言名稱,而 $PSUICulture 變數則可儲存系統 在使用者介面元素 (例如功能表和文字字串) 中使用的 UI 語言名稱。 -- ConvertFrom-StringData Cmdlet,用來將文字字串轉換成類似字典的雜湊表, 以協助翻譯工作的進行。如需詳細資訊,請參閱 ConvertFrom-StringData。 -- 新的 .psd1 檔案類型,用來儲存翻譯後的文字字串。.psd1 檔案儲存在指令 碼目錄的特定語言子目錄中。 -- Import-LocalizedData Cmdlet,用來在執行階段將指定之語言的翻譯文字字 串匯入至指令碼。這個 Cmdlet 可辨識及匯入 Windows 支援之任何語言的字 串。如需詳細資訊,請參閱 Import-LocalizedData。 DATA 區段:儲存預設字串 在指令碼中使用 Data 區段即可儲存預設語言的文字字串。 請在 here-string 中以索引鍵/值組的形式排列字串。每個索引鍵/值組必須自成一 行。如果要包含註解,必須將註解放在不同行。 ConvertFrom-StringData Cmdlet 會將 here-string 中的索引鍵/值組轉換成類似字 典的雜湊表,而此雜湊表是儲存在 Data 區段變數的值中。 在下列範例中,World.ps1 指令碼的 Data 區段包含一組英文-美國 (en-US) 版的指 令碼提示訊息。ConvertFrom-StringData Cmdlet 會將字串轉換成雜湊表,並將字串 儲存在 $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 的個別文 字檔中,並將這些文字檔儲存到指令碼目錄的子目錄,其中這些子目錄具有下列格 式之文化特性名稱: <語言>–<地區> 範例: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 Cmdlet。 Import-LocalizedData 會尋找 $PSUICulture 自動變數的值,並匯入符合 $PSUICulture 值之子目錄中 <指令碼名稱>.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) 的 Data 區段,其中包含 ConvertFrom-StringData 命令。提交到 ConvertFrom-StringData 的運算式是 here-string,其中包含預設 UI 文化特性 en-US 中星期別名稱的索引鍵/值組。ConvertFrom-StringData Cmdlet 會 將 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 # 取得代表星期別的數字 (星期一 = 1)。 # 編製 $a 的索引以取得星期別的名稱。 # 使用字串格式來建立句子。 "{0} {1}" –f $Day.messageDate, $a[(get-date -uformat %u)] | Out-Host 支援指令碼的 .psd1 檔案會儲存在指令碼目錄中名稱與 $PSUICulture 值相符的子 目錄。 以下列出 .\de-DE\sample1.psd1 的完整清單: # culture="en-US" ConvertFrom-StringData @' messageDate = Today is d1 = Monday (德文) d2 = Tuesday (德文) d3 = Wednesday (德文) d4 = Thursday (德文) d5 = Friday (德文) d6 = Saturday (德文) d7 = Sunday (德文) '@ 因此,當您在 $PSUICulture 值為 de-DE 的系統執行 Sample.ps1 時,指令碼會輸 出以下結果: Today is Friday (德文) 請參閱 about_Data_Sections about_Automatic_Variables about_Hash_Tables about_Quoting_Rules ConvertFrom-StringData Import-LocalizedData