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-StringDatakterá 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, .psd1který 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-LocalizedDatakterá 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

Viz také