Freigeben über


about_Script_Internationalization

Kurze Beschreibung

Beschreibt die Skript internationalisierungsfeatures, die es Skripts erleichtern, Nachrichten und Anweisungen für Benutzer in ihrer Benutzeroberflächensprache anzuzeigen.

Lange Beschreibung

Mit den PowerShell-Skript-Internationalisierungsfeatures können Sie Benutzer auf der ganzen Welt besser bedienen, indem Sie Hilfe und Benutzernachrichten in der Sprache des Benutzers anzeigen.

Die Skript-Internationalisierungsfeatures fragen die Ui-Kultur des Betriebssystems während der Ausführung ab, importieren die entsprechenden übersetzten Textzeichenfolgen und zeigen sie dem Benutzer an. Im Abschnitt Daten können Sie Textzeichenfolgen getrennt vom Code speichern, sodass sie leicht identifiziert und extrahiert werden können. Ein neues Cmdlet, ConvertFrom-StringData, konvertiert Textzeichenfolgen in wörterbuchähnliche Hashtabellen, um die Übersetzung zu erleichtern.

Um internationalen Hilfetext zu unterstützen, enthält PowerShell die folgenden Features:

  • Ein Datenabschnitt, in dem Textzeichenfolgen von Codeanweisungen getrennt werden. Weitere Informationen zum Abschnitt Daten finden Sie unter about_Data_Sections.

  • Neue automatische Variablen $PSCulture und $PSUICulture. $PSCulture speichert den Namen der Benutzeroberflächensprache, die im System für Elemente wie Datum, Uhrzeit und Währung verwendet wird. Die $PSUICulture Variable speichert den Namen der Benutzeroberflächensprache, die im System für Benutzeroberflächenelemente wie Menüs und Textzeichenfolgen verwendet wird.

  • Ein Cmdlet, ConvertFrom-StringData, das Textzeichenfolgen in wörterbuchähnliche Hashtabellen konvertiert, um die Übersetzung zu erleichtern. Weitere Informationen finden Sie unter ConvertFrom-StringData.

  • Ein neuer Dateityp, .psd1, in dem übersetzte Textzeichenfolgen gespeichert werden. Die .psd1 Dateien werden in sprachspezifischen Unterverzeichnissen des Skriptverzeichnisses gespeichert.

  • Ein Cmdlet , Import-LocalizedDatadas übersetzte Textzeichenfolgen für eine angegebene Sprache zur Laufzeit in ein Skript importiert. Dieses Cmdlet erkennt und importiert Zeichenfolgen in jeder von Windows unterstützten Sprache. Weitere Informationen finden Sie unter Import-LocalizedData.

Der Datenabschnitt: Speichern von Standardzeichenfolgen

Verwenden Sie einen Abschnitt Daten im Skript, um die Textzeichenfolgen in der Standardsprache zu speichern. Ordnen Sie die Zeichenfolgen in Schlüssel-Wert-Paaren in einer here-Zeichenfolge an. Jedes Schlüssel-Wert-Paar muss sich in einer separaten Zeile befinden. Wenn Sie Kommentare einschließen, müssen sich die Kommentare in separaten Zeilen befinden.

Das ConvertFrom-StringData Cmdlet konvertiert die Schlüssel-Wert-Paare in der here-string in eine wörterbuchähnliche Hashtabelle, die im Wert der Data-Abschnittsvariable gespeichert ist.

Im folgenden Beispiel enthält der Abschnitt Daten des World.ps1 Skripts den satz English-United States (en-US) von Eingabeaufforderungsmeldungen für ein Skript. Das ConvertFrom-StringData Cmdlet konvertiert die Zeichenfolgen in eine Hashtabelle und speichert sie in der $msgtable Variablen.

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

Weitere Informationen zu here-strings finden Sie unter about_Quoting_Rules.

PSD1-Dateien: Speichern übersetzter Zeichenfolgen

Speichern Sie die Skriptnachrichten für jede Ui-Sprache in separaten Textdateien mit demselben Namen wie das Skript und die .psd1 Dateinamenerweiterung. Speichern Sie die Dateien in Unterverzeichnissen des Skriptverzeichnisses mit Namen von Kulturen im folgenden Format:

<language>-<region>

Beispiele: de-DE, ar-SA und zh-Hans

Wenn das World.ps1 Skript beispielsweise im C:\Scripts Verzeichnis gespeichert ist, erstellen Sie eine Dateiverzeichnisstruktur, die wie folgt aussieht:

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

Die World.psd1 Datei im Unterverzeichnis de-DE des Skriptverzeichnisses enthält möglicherweise die folgende Anweisung:

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

Ebenso kann die World.psd1 Datei im Unterverzeichnis ar-SA des Skriptverzeichnisses die folgende Anweisung enthalten:

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

Import-LocalizedData: Dynamisches Abrufen übersetzter Zeichenfolgen

Verwenden Sie Import-LocalizedData das Cmdlet, um die Zeichenfolgen in der Benutzeroberflächensprache des aktuellen Benutzers abzurufen.

Import-LocalizedData sucht den Wert der $PSUICulture automatischen Variablen und importiert den Inhalt der <script-name>.psd1 Dateien in das Unterverzeichnis, das dem $PSUICulture Wert entspricht. Anschließend wird der importierte Inhalt in der Variablen gespeichert, die durch den Wert des BindingVariable-Parameters angegeben wird.

Import-LocalizedData -BindingVariable msgTable

Wenn der Import-LocalizedData Befehl beispielsweise im C:\Scripts\World.ps1 Skript angezeigt wird und der Wert von $PSUICulture "ar-SA" lautet, Import-LocalizedData sucht die folgende Datei:

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

Anschließend importiert es die arabischen Textzeichenfolgen aus der Datei in die $msgTable Variable und ersetzt alle Standardzeichenfolgen, die möglicherweise im Abschnitt Daten des World.ps1 Skripts definiert werden.

Wenn das Skript die $msgTable Variable zum Anzeigen von Benutzernachrichten verwendet, werden die Nachrichten daher auf Arabisch angezeigt.

Das folgende Skript zeigt beispielsweise die Meldung "Geben Sie Ihren Benutzernamen ein" auf Arabisch an:

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

Wenn Import-LocalizedData keine .psd1 Datei gefunden wird, die dem Wert von $PSUIcultureentspricht, wird der Wert von $msgTable nicht ersetzt, und der Aufruf von $msgTable.promptMsg zeigt die Fallbackzeichenfolgen en-US an.

Beispiele

In diesem Beispiel wird gezeigt, wie die Skript internationalisierungsfeatures in einem Skript verwendet werden, um Benutzern einen Wochentag in der sprache anzuzeigen, die auf dem Computer festgelegt ist.

Im Folgenden finden Sie eine vollständige Auflistung der Sample1.ps1 Skriptdatei.

Das Skript beginnt mit einem Datenabschnitt mit dem Namen Day ($Day), der einen ConvertFrom-StringData Befehl enthält. Der an übermittelte ConvertFrom-StringData Ausdruck ist eine here-Zeichenfolge, die die Tagnamen in der Standard-Benutzeroberflächenkultur en-US in Schlüssel-Wert-Paaren enthält. Das ConvertFrom-StringData Cmdlet konvertiert die Schlüssel-Wert-Paare in der here-string in eine Hashtabelle und speichert sie dann im Wert der $Day Variablen.

Der Import-LocalizedData Befehl importiert den Inhalt der .psd1 Datei in das Verzeichnis, das dem Wert der $PSUICulture automatischen Variablen entspricht, und speichert ihn dann in der $Day Variablen, wobei die im Abschnitt Daten definierten Werte $Day ersetzt werden.

Die restlichen Befehle laden die Zeichenfolgen in ein Array und zeigen sie an.

$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

Die .psd1 Dateien, die das Skript unterstützen, werden in Unterverzeichnissen des Skriptverzeichnisses mit Namen gespeichert, die den $PSUICulture Werten entsprechen.

Im Folgenden finden Sie eine vollständige Auflistung von .\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
'@

Wenn Sie also Sample.ps1 auf einem System ausführen, auf dem der Wert von $PSUICulture de-DE lautet, lautet die Ausgabe des Skripts:

Heute ist Freitag

Weitere Informationen