about_Script_Internationalization
Krátký popis
Popisuje funkce internacionalizace skriptů, které usnadňují zobrazování zpráv a pokynů uživatelům v jazyce uživatelského rozhraní.
Dlouhý popis
Funkce internationalizace skriptů PowerShellu umožňují lépe obsluhovat uživatele po celém světě zobrazením nápovědy a zpráv uživatelů v jazyce uživatele.
Funkce internacionalizace skriptů dotazují jazykovou verzi uživatelského rozhraní operačního systému během provádění, importují příslušné přeložené textové řetězce a zobrazí je uživateli. Část Data umožňuje ukládat textové řetězce oddělené od kódu, aby se snadno identifikovaly a extrahovali. Nová rutina ConvertFrom-StringData
, převede textové řetězce na tabulky hash podobné slovníku, aby se usnadnil překlad.
PowerShell obsahuje následující funkce, které podporují mezinárodní text nápovědy:
Část Data, která odděluje textové řetězce od pokynů kódu. Další informace o části Data najdete v tématu about_Data_Sections.
Nové automatické proměnné
$PSCulture
a$PSUICulture
.$PSCulture
ukládá název jazyka uživatelského rozhraní používaného v systému pro prvky, jako je datum, čas a měna. Proměnná$PSUICulture
ukládá název jazyka uživatelského rozhraní používaného v systému pro prvky uživatelského rozhraní, jako jsou nabídky a textové řetězce.Rutina,
ConvertFrom-StringData
která převádí textové řetězce na tabulky hash podobné slovníku pro usnadnění překladu. Další informace naleznete v tématu ConvertFrom-StringData.Nový typ souboru,
.psd1
který ukládá přeložené textové řetězce. Soubory.psd1
jsou uloženy v podadresářích adresáře skriptů specifických pro jazyk.Rutina,
Import-LocalizedData
která importuje přeložené textové řetězce pro zadaný jazyk do skriptu za běhu. Tato rutina rozpoznává a importuje řetězce v libovolném jazyce podporovaném systémem Windows. Další informace naleznete v tématu Import-LocalizedData.
Oddíl Dat: Ukládání výchozích řetězců
K uložení textových řetězců ve výchozím jazyce použijte oddíl Data ve skriptu. Uspořádejte řetězce ve dvojicích klíč/hodnota v řetězci sem. Každý pár klíč/hodnota musí být na samostatném řádku. Pokud zahrnete komentáře, musí být komentáře na samostatných řádcích.
Rutina ConvertFrom-StringData
převede páry klíč/hodnota v tomto řetězci na tabulku hash podobné slovníku, která je uložená v hodnotě proměnné oddílu Data.
V následujícím příkladu obsahuje část World.ps1
Data skriptu sadu zpráv výzvy pro skript v angličtině-USA (en-US). Rutina ConvertFrom-StringData
převede řetězce na tabulku hash a uloží je do $msgtable
proměnné.
$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.
'@
}
Další informace o tomto řetězci najdete v tématu about_Quoting_Rules.
Soubory PSD1: Ukládání přeložených řetězců
Zprávy skriptu pro každý jazyk uživatelského rozhraní uložte do samostatných textových souborů se stejným názvem jako skript a příponu .psd1
názvu souboru. Soubory uložte do podadresářů adresáře skriptu s názvy jazykových verzí v následujícím formátu:
<language>-<region>
Příklady: de-DE, ar-SA a zh-Hans
Pokud je například World.ps1
skript uložený v C:\Scripts
adresáři, vytvořili byste strukturu adresářů souborů, která se podobá následujícímu:
C:\Scripts
C:\Scripts\World.ps1
C:\Scripts\de-DE\World.psd1
C:\Scripts\ar-SA\World.psd1
C:\Scripts\zh-CN\World.psd1
...
Soubor World.psd1
v podadresáři de-DE adresáře skriptu může obsahovat následující příkaz:
ConvertFrom-StringData -StringData @'
helloWorld = Hallo, Welt.
errorMsg1 = Das Feld Benutzername darf nicht leer sein.
promptMsg = Geben Sie Ihren Benutzernamen ein.
'@
World.psd1
Soubor v podadresáři ar-SA adresáře skriptu může obsahovat následující příkaz:
ConvertFrom-StringData -StringData @'
helloWorld = مرحبًا أيها العالَم
errorMsg1 = لا يمكنك ترك حقل اسم المستخدم فارغًا
promptMsg = يرجى إدخال اسم المستخدم الخاص بك
'@
Import-LocalizedData: Dynamické načítání přeložených řetězců
K načtení řetězců v jazyce uživatelského rozhraní aktuálního uživatele použijte rutinu Import-LocalizedData
.
Import-LocalizedData
najde hodnotu $PSUICulture
automatické proměnné a importuje obsah <script-name>.psd1
souborů v podadresáři, který odpovídá hodnotě $PSUICulture
. Pak uloží importovaný obsah do proměnné určené hodnotou BindingVariable parametru.
Import-LocalizedData -BindingVariable msgTable
Pokud Import-LocalizedData
se například příkaz zobrazí ve C:\Scripts\World.ps1
skriptu a hodnota $PSUICulture
"ar-SA", Import-LocalizedData
najde následující soubor:
C:\Scripts\ar-SA\World.psd1
Potom naimportuje arabské textové řetězce ze souboru do $msgTable
proměnné a nahradí všechny výchozí řetězce, které mohou být definovány v části World.ps1
Data skriptu.
V důsledku toho, když skript používá $msgTable
proměnnou k zobrazení uživatelských zpráv, zprávy se zobrazí v arabštině.
Například následující skript zobrazí zprávu "Zadejte své uživatelské jméno" v arabštině:
if (!($username)) { $msgTable.promptMsg }
Pokud Import-LocalizedData
nelze najít .psd1
soubor, který odpovídá hodnotě $PSUIculture
, hodnota $msgTable
není nahrazena a volání, které $msgTable.promptMsg
zobrazí záložní řetězce en-US.
Příklady
Tento příklad ukazuje, jak se ve skriptu používají funkce internacionalizace skriptů k zobrazení dne v týdnu uživatelům v jazyce, který je v počítači nastavený.
Následuje úplný seznam souboru skriptu Sample1.ps1.
Skript začíná částí Data s názvem Den ($Day), která obsahuje ConvertFrom-StringData
příkaz. Výraz odeslaný je ConvertFrom-StringData
řetězec here-string, který obsahuje názvy dnů ve výchozí jazykové verzi uživatelského rozhraní en-US ve dvojicích klíč/hodnota. Rutina ConvertFrom-StringData
převede páry klíč/hodnota v zde-řetězci na tabulku hash a pak ji uloží do hodnoty $Day
proměnné.
Příkaz Import-LocalizedData
naimportuje obsah .psd1
souboru v adresáři, který odpovídá hodnotě $PSUICulture
automatické proměnné, a pak ho uloží do $Day
proměnné a nahradí hodnoty $Day
, které jsou definovány v části Data.
Zbývající příkazy načtou řetězce do pole a zobrazí je.
$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
Soubory .psd1
, které podporují skript, jsou uloženy v podadresářích adresáře skriptu s názvy, které odpovídají hodnotám $PSUICulture
.
Následuje úplný seznam .\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
'@
V důsledku toho při spuštění Sample.ps1 v systému, na kterém je hodnota $PSUICulture
de-DE, výstup skriptu je:
Heute ist Freitag