about_Script_Internationalization

Kort beskrivning

Beskriver de funktioner för skriptinter internationalisering som gör det enkelt för skript att visa meddelanden och instruktioner för användare på deras användargränssnittsspråk.

Lång beskrivning

Med internationaliseringsfunktionerna för PowerShell-skript kan du bättre hantera användare över hela världen genom att visa hjälp- och användarmeddelanden på användarens språk.

Funktionerna för skriptinter internationalisering frågar användargränssnittskulturen i operativsystemet under körningen, importerar lämpliga översatta textsträngar och visar dem för användaren. I avsnittet Data kan du lagra textsträngar separat från kod så att de enkelt identifieras och extraheras. En ny cmdlet, ConvertFrom-StringData, konverterar textsträngar till ordlisteliknande hash-tabeller för att underlätta översättningen.

För att stödja internationell hjälptext innehåller PowerShell följande funktioner:

  • Ett dataavsnitt som skiljer textsträngar från kodinstruktioner. Mer information om avsnittet Data finns i about_Data_Sections.

  • Nya automatiska variabler $PSCulture och $PSUICulture. $PSCulture lagrar namnet på det användargränssnittsspråk som används i systemet för element som datum, tid och valuta. Variabeln $PSUICulture lagrar namnet på det användargränssnittsspråk som används i systemet för användargränssnittselement som menyer och textsträngar.

  • En cmdlet, ConvertFrom-StringData, som konverterar textsträngar till ordlisteliknande hash-tabeller för att underlätta översättningen. Mer information finns i ConvertFrom-StringData.

  • En ny filtyp, .psd1, som lagrar översatta textsträngar. Filerna .psd1 lagras i språkspecifika underkataloger i skriptkatalogen.

  • En cmdlet, Import-LocalizedData, som importerar översatta textsträngar för ett angivet språk till ett skript vid körning. Den här cmdleten identifierar och importerar strängar på alla Windows-språk som stöds. Mer information finns i Import-LocalizedData.

Avsnittet Data: Lagra standardsträngar

Använd ett dataavsnitt i skriptet för att lagra textsträngarna på standardspråket. Ordna strängarna i nyckel/värde-par i en här-sträng. Varje nyckel/värde-par måste finnas på en separat rad. Om du inkluderar kommentarer måste kommentarerna finnas på separata rader.

Cmdleten ConvertFrom-StringData konverterar nyckel/värde-paren i här-strängen till en ordlisteliknande hash-tabell som lagras i värdet för dataavsnittsvariabeln.

I följande exempel innehåller avsnittet Data i skriptet World.ps1 uppsättningen english-USA (en-US) med promptmeddelanden för ett skript. Cmdleten ConvertFrom-StringData konverterar strängarna till en hash-tabell och lagrar dem i variabeln $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.
'@
}

Mer information om här-strängar finns i about_Quoting_Rules.

PSD1-filer: Lagra översatta strängar

Spara skriptmeddelandena för varje gränssnittsspråk i separata textfiler med samma namn som skriptet och filnamnstillägget .psd1 . Lagra filerna i underkataloger i skriptkatalogen med namn på kulturer i följande format:

<language>-<region>

Exempel: de-DE, ar-SA och zh-Hans

Om skriptet World.ps1 till exempel lagras i C:\Scripts katalogen skapar du en filkatalogstruktur som liknar följande:

C:\Scripts
C:\Scripts\World.ps1
C:\Scripts\de-DE\World.psd1
C:\Scripts\ar-SA\World.psd1
C:\Scripts\zh-CN\World.psd1
...

Filen World.psd1 i underkatalogen de-DE i skriptkatalogen kan innehålla följande instruktion:

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

World.psd1 På samma sätt kan filen i underkatalogen ar-SA i skriptkatalogen innehålla följande instruktion:

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

Import-LocalizedData: Dynamisk hämtning av översatta strängar

Om du vill hämta strängarna i användargränssnittsspråket för den aktuella användaren använder du cmdleten Import-LocalizedData .

Import-LocalizedData hittar värdet för den $PSUICulture automatiska variabeln och importerar innehållet <script-name>.psd1 i filerna i underkatalogen som matchar $PSUICulture värdet. Sedan sparas det importerade innehållet i variabeln som anges av värdet för parametern BindingVariable .

Import-LocalizedData -BindingVariable msgTable

Om Import-LocalizedData kommandot till exempel visas i skriptet C:\Scripts\World.ps1 och värdet $PSUICulture för är "ar-SA" Import-LocalizedData hittar du följande fil:

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

Sedan importeras de arabiska textsträngarna från filen till variabeln $msgTable och ersätter eventuella standardsträngar som kan definieras i avsnittet Data i skriptet World.ps1 .

När skriptet använder variabeln $msgTable för att visa användarmeddelanden visas därför meddelandena på arabiska.

Följande skript visar till exempel meddelandet "Ange ditt användarnamn" på arabiska:

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

Om Import-LocalizedData det inte går att hitta en .psd1 fil som matchar värdet $PSUIcultureför ersätts inte värdet $msgTable för och anropet till $msgTable.promptMsg visar reservsträngarna en-US.

Exempel

Det här exemplet visar hur funktionerna för skript internationalisering används i ett skript för att visa en dag i veckan för användare på det språk som anges på datorn.

Följande är en fullständig lista över skriptfilen Sample1.ps1.

Skriptet börjar med ett dataavsnitt med namnet Day ($Day) som innehåller ett ConvertFrom-StringData kommando. Uttrycket som skickas till ConvertFrom-StringData är en här-sträng som innehåller dagnamnen i standardkulturen för användargränssnittet, en-US, i nyckel/värde-par. Cmdleten ConvertFrom-StringData konverterar nyckel/värde-paren i här-strängen till en hash-tabell och sparar den sedan i värdet för variabeln $Day .

Kommandot Import-LocalizedData importerar innehållet .psd1 i filen i katalogen som matchar värdet för den $PSUICulture automatiska variabeln och sparar den sedan i variabeln $Day och ersätter värdena $Day för som definieras i avsnittet Data.

De återstående kommandona läser in strängarna i en matris och visar dem.

$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

Filerna .psd1 som stöder skriptet sparas i underkataloger i skriptkatalogen med namn som matchar $PSUICulture värdena.

Följande är en fullständig lista över .\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
'@

När du kör Sample.ps1 på ett system där värdet $PSUICulture för är de-DE är resultatet av skriptet därför:

Heute ist Freitag

Se även