Delen via


over_Script_Internationalisatie

Korte beschrijving

Hierin worden de internationaliseringsfuncties van scripts beschreven waarmee scripts berichten en instructies voor gebruikers in hun gebruikersinterfacetaal (UI) gemakkelijk kunnen weergeven.

Lange beschrijving

Met de internationaliseringsfuncties van PowerShell-scripts kunt u gebruikers overal ter wereld beter bedienen door help- en gebruikersberichten weer te geven in de taal van de gebruiker.

De script internationalisatiefuncties voeren een query uit op de UI-cultuur van het besturingssysteem tijdens de uitvoering, importeren van de juiste vertaalde tekenreeksen en deze weergeven 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 woordenlijstachtige hashtabellen om vertaling te vergemakkelijken.

PowerShell biedt de volgende functies om internationale Help-tekst te ondersteunen:

  • Een gegevenssectie die teksttekenreeksen scheidt van code-instructies. Zie about_Data_Sectionsvoor meer informatie over de sectie Gegevens.

  • Nieuwe automatische variabelen, $PSCulture en $PSUICulture. $PSCulture slaat de naam op van de gebruikersinterfacetaal die in het systeem wordt gebruikt voor elementen zoals de datum, tijd en valuta. De variabele $PSUICulture slaat de naam op van de gebruikersinterfacetaal 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-StringDatavoor meer informatie.

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

  • Een cmdlet, Import-LocalizedData, waarmee vertaalde tekenreeksen 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-LocalizedDatavoor meer informatie.

De sectie Gegevens: Standaardtekenreeksen opslaan

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

Met de cmdlet ConvertFrom-StringData worden de sleutel-waardeparen in de hier-tekenreeks geconverteerd naar een hash-tabel die is opgeslagen in de waarde van de variabele Gegevenssectie.

In het volgende voorbeeld bevat de sectie Gegevens van het World.ps1-script de set English-United-staten (en-US) met promptberichten voor een script. De ConvertFrom-StringData-cmdlet converteert de tekenreeksen naar een hash-tabel en slaat deze op in de variabele $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.
'@
}

Zie about_Quoting_Rulesvoor meer informatie over hier-tekenreeksen.

PSD1-bestanden: vertaalde tekenreeksen opslaan

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

<language>-<region>

Voorbeelden: de-DE, ar-SAen zh-Hans

Als het World.ps1 script bijvoorbeeld is opgeslagen in de map C:\Scripts, 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 bestand World.psd1 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 bevat het World.psd1 bestand in de submap ar-SA van de scriptmap mogelijk de volgende instructie:

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

Import-LocalizedData: Dynamisch ophalen van vertaalde tekenreeksen

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

Import-LocalizedData de waarde van de $PSUICulture automatische variabele vindt en de inhoud van de <script-name>.psd1-bestanden importeert 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 opdracht Import-LocalizedData bijvoorbeeld wordt weergegeven in het C:\Scripts\World.ps1 script en de waarde van $PSUICulture 'ar-SA' is, zoekt Import-LocalizedData het volgende bestand:

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

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

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

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

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

Als Import-LocalizedData geen .psd1-bestand kan vinden dat overeenkomt met de waarde van $PSUICulture, wordt de waarde van $msgTable niet vervangen en geeft $msgTable.promptMsg de terugval en-US tekenreeksen weer.

Voorbeelden

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

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

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

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

De overige opdrachten laden de tekenreeksen in een matrix en geven ze weer.

$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 met .\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 u Sample.ps1 uitvoert op een systeem waarop de waarde van $PSUICulture de-DEis, is de uitvoer van het script:

Heute ist Freitag

Zie ook