Delen via


about_Script_Internationalization

Korte beschrijving

Hierin worden de functies voor internationalisering van scripts beschreven waarmee scripts eenvoudig berichten en instructies kunnen weergeven aan gebruikers in hun taal van de gebruikersinterface (UI).

Lange beschrijving

Met de functies voor internationalisering van PowerShell-scripts kunt u gebruikers over de hele wereld beter van dienst zijn door Help- en gebruikersberichten weer te geven in de taal van de gebruiker.

Met de functies voor internationalisering van scripts wordt tijdens de uitvoering een query uitgevoerd op de UI-cultuur van het besturingssysteem, worden de juiste vertaalde tekenreeksen geïmporteerd en weergegeven aan de gebruiker. In de sectie Gegevens kunt u teksttekenreeksen gescheiden van code opslaan, zodat ze eenvoudig kunnen worden geïdentificeerd en geëxtraheerd. Een nieuwe cmdlet, ConvertFrom-StringData, converteert teksttekenreeksen naar hashtabellen die lijken op een woordenlijst om de vertaling te vergemakkelijken.

Ter ondersteuning van internationale Help-tekst bevat PowerShell de volgende functies:

  • Een sectie Gegevens die tekenreeksen scheidt van code-instructies. Zie about_Data_Sections voor meer informatie over de sectie Gegevens.

  • Nieuwe automatische variabelen, $PSCulture en $PSUICulture. $PSCulture slaat de naam op van de taal van de gebruikersinterface die op het systeem wordt gebruikt voor elementen zoals de datum, tijd en valuta. Met $PSUICulture de variabele wordt de naam opgeslagen van de taal van de gebruikersinterface die op het systeem wordt gebruikt voor elementen van de gebruikersinterface, zoals menu's en tekenreeksen.

  • Een cmdlet, ConvertFrom-StringData, die teksttekenreeksen converteert naar woordenlijstachtige hashtabellen om de vertaling te vergemakkelijken. Zie ConvertFrom-StringData voor meer informatie.

  • Een nieuw bestandstype, .psd1, waarin vertaalde teksttekenreeksen worden opgeslagen. De .psd1 bestanden worden opgeslagen in taalspecifieke submappen van de scriptmap.

  • Een cmdlet, Import-LocalizedData, waarmee vertaalde teksttekenreeksen voor een opgegeven taal tijdens runtime in een script worden geïmporteerd. Deze cmdlet herkent en importeert tekenreeksen in elke door Windows ondersteunde taal. Zie Import-LocalizedData voor meer informatie.

De sectie Gegevens: Standaardtekenreeksen opslaan

Gebruik een sectie Gegevens in het script om de teksttekenreeksen op te slaan in de standaardtaal. Rangschik de tekenreeksen in sleutel-waardeparen in een here-tekenreeks. Elk sleutel-waardepaar moet zich op een afzonderlijke regel bevinden. Als u opmerkingen opneemt, moeten de opmerkingen op afzonderlijke regels staan.

De ConvertFrom-StringData cmdlet converteert de sleutel-waardeparen in de hier-tekenreeks naar een woordenlijstachtige hashtabel die is opgeslagen in de waarde van de sectievariabele Gegevens.

In het volgende voorbeeld bevat de sectie Gegevens van het World.ps1 script de English-United States (en-US) met promptberichten voor een script. De ConvertFrom-StringData cmdlet converteert de tekenreeksen naar een hash-tabel en slaat deze op in de $msgtable variabele.

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

Zie about_Quoting_Rules voor meer informatie over here-tekenreeksen.

PSD1-bestanden: vertaalde tekenreeksen opslaan

Sla de scriptberichten voor elke UI-taal op in afzonderlijke tekstbestanden met dezelfde naam als het script en de .psd1 bestandsnaamextensie. Sla de bestanden op in submappen van de scriptmap met namen van culturen in de volgende indeling:

<language>-<region>

Voorbeelden: de-DE, ar-SA en zh-Hans

Als het World.ps1 script bijvoorbeeld is opgeslagen in de C:\Scripts map, maakt u een bestandsmapstructuur die er ongeveer als volgt uitziet:

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

Het World.psd1 bestand in de submap de-DE van de scriptmap kan de volgende instructie bevatten:

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

Op dezelfde manier kan het World.psd1 bestand in de submap ar-SA van de scriptmap de volgende instructie bevatten:

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

Import-LocalizedData: Dynamisch ophalen van vertaalde tekenreeksen

Gebruik de cmdlet om de tekenreeksen op te halen in de taal van de gebruikersinterface van de Import-LocalizedData huidige gebruiker.

Import-LocalizedData zoekt de waarde van de $PSUICulture automatische variabele en importeert de inhoud van de <script-name>.psd1 bestanden in de submap die overeenkomt met de $PSUICulture waarde. Vervolgens wordt de geïmporteerde inhoud opgeslagen in de variabele die is opgegeven door de waarde van de parameter BindingVariable .

Import-LocalizedData -BindingVariable msgTable

Als de Import-LocalizedData opdracht bijvoorbeeld wordt weergegeven in het C:\Scripts\World.ps1 script en de waarde van $PSUICulture 'ar-SA' is, Import-LocalizedData wordt het volgende bestand gevonden:

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

Vervolgens worden de Arabische tekenreeksen uit het bestand geïmporteerd in de $msgTable variabele, waarbij eventuele standaardtekenreeksen worden vervangen die mogelijk zijn gedefinieerd in de sectie Gegevens van het World.ps1 script.

Als gevolg hiervan worden de berichten weergegeven in het Arabisch wanneer het script de $msgTable variabele gebruikt om gebruikersberichten weer te geven.

In het volgende script wordt bijvoorbeeld het bericht 'Voer uw gebruikersnaam in' in het Arabisch weergegeven:

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

Als Import-LocalizedData een .psd1 bestand niet kan worden gevonden dat overeenkomt met de waarde van $PSUIculture, wordt de waarde van $msgTable niet vervangen en worden de $msgTable.promptMsg terugvaltekenreeksen en-US weergegeven.

Voorbeelden

In dit voorbeeld ziet u hoe de functies voor internationalisering van scripts worden gebruikt in een script om een dag van de week weer te geven aan gebruikers in de taal die is ingesteld op de computer.

Hier volgt een volledige lijst van het Sample1.ps1 scriptbestand.

Het script begint met een gegevenssectie met de naam Dag ($Day) die een ConvertFrom-StringData opdracht bevat. De expressie die wordt verzonden naar ConvertFrom-StringData is een here-tekenreeks die de dagnamen in de standaard ui-cultuur, en-US, in sleutel-waardeparen bevat. De ConvertFrom-StringData cmdlet converteert de sleutel-waardeparen in de here-tekenreeks naar een hash-tabel en slaat deze vervolgens op in de waarde van de $Day variabele.

De Import-LocalizedData opdracht importeert de inhoud van het .psd1 bestand in de map die overeenkomt met de waarde van de $PSUICulture automatische variabele en slaat deze vervolgens op in de $Day variabele, waarbij de waarden van $Day worden vervangen die zijn gedefinieerd in de sectie Gegevens.

Met de overige opdrachten worden de tekenreeksen in een matrix geladen en weergegeven.

$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

De .psd1 bestanden die het script ondersteunen, worden opgeslagen in submappen van de scriptmap met namen die overeenkomen met de $PSUICulture waarden.

Hier volgt een volledige lijst van .\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
'@

Als gevolg hiervan, wanneer u Sample.ps1 uitvoert op een systeem waarop de waarde van $PSUICulture de-DE is, is de uitvoer van het script:

Heute ist Freitag

Zie ook