Sdílet prostřednictvím


o_Skript_Internationalizace

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. Sekce Data umožňuje ukládání textových řetězců oddělených od kódu, aby se snadno identifikovaly a extrahovaly. Nová rutina, ConvertFrom-StringData, převede textové řetězce na tabulky hash podobné slovníku pro usnadnění překladu.

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 naleznete v tématu about_Data_Sections.

  • Nové automatické proměnné, $PSCulture a $PSUICulture. $PSCulture uloží 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.

  • Cmdlet, ConvertFrom-StringData, který převádí textové řetězce na tabulky hash podobné slovníku ke snadnějšímu překladu. Pro více informací viz ConvertFrom-StringData.

  • Nový typ souboru, .psd1, který ukládá přeložené textové řetězce. Soubory .psd1 se ukládají v podadresářích skriptů specifických pro jazyk.

  • Cmdlet Import-LocalizedData, který importuje přeložené textové řetězce pro zadaný jazyk do skriptu během provádění. 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 do dvojic klíč/hodnota pomocí here-stringu. 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 here-stringu na hashovací tabulku typu slovníku, která je uložena v proměnné části Data.

V následujícím příkladu část Data skriptu World.ps1 obsahuje sadu zpráv výzvy pro skript English-United States (en-US). Cmdlet ConvertFrom-StringData převede řetězce na hash tabulku a uloží je do proměnné $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.
'@
}

Další informace o zde-řetězce naleznete 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 názvu souboru .psd1. Soubory uložte do podadresářů adresáře skriptu s názvy lokalizací v následujícím formátu:

<language>-<region>

Příklady: de-DE, ar-SAa zh-Hans

Pokud je například skript World.ps1 uložen v adresáři C:\Scripts, vytvořili byste strukturu adresářů souborů, která se podobá následující:

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.
'@

Podobně může soubor World.psd1 v podadresáři ar-SA adresáře skriptu 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 souborů <script-name>.psd1 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 se například příkaz Import-LocalizedData zobrazí ve skriptu C:\Scripts\World.ps1 a hodnota $PSUICulture je "ar-SA", Import-LocalizedData najde následující soubor:

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

Potom naimportuje arabské textové řetězce ze souboru do proměnné $msgTable a nahradí všechny výchozí řetězce, které mohou být definovány v části Data skriptu World.ps1.

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 nemůže najít .psd1 soubor, který odpovídá hodnotě $PSUICulture, hodnota $msgTable se nenahradí a volání $msgTable.promptMsg zobrazí náhradní en-US řetězce.

Examples

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á oddílem Data s názvem Den ($Day), který obsahuje příkaz ConvertFrom-StringData. Výraz odeslaný do ConvertFrom-StringData je zde jako řetězec, který obsahuje názvy dnů ve výchozím jazyce uživatelského rozhraní en-US, ve formátu dvojic klíč/hodnota. Příkaz ConvertFrom-StringData převede páry klíč/hodnota v řetězci here-string na hashovací tabulku a pak ji uloží do proměnné $Day.

Příkaz Import-LocalizedData naimportuje obsah souboru .psd1 v adresáři, který odpovídá hodnotě $PSUICulture automatické proměnné, a pak ho uloží do proměnné $Day 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
'@

Když spustíte Sample.ps1 na systému, na kterém má hodnota $PSUICulture hodnotu de-DE, výstup skriptu je:

Heute ist Freitag

Viz také