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 $PSUIculture
fö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