about_Script_Internationalization
Letzte Aktualisierung: Mai 2014
Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
THEMA
about_Script_Internationalization
KURZE BESCHREIBUNG
Beschreibt die Funktionen des Skript-Internationalisierung von Windows PowerShell® 2.0, mit denen Skripts ganz einfach Meldungen und Informationen für Benutzer in der Sprache ihrer Benutzeroberfläche (UI) anzeigen können.
LANGE BESCHREIBUNG
Mit den Funktionen der Windows PowerShell-Skript-Internationalisierung können den Bedürfnissen von Benutzer auf der ganzen Welt besser gerecht werden, indem Sie Hilfe und Benutzermeldungen für Skripts und Funktionen in der Benutzeroberflächensprache des jeweiligen Benutzers anzeigen lassen.
Die Funktionen der Skript-Internationalisierung fragen während der Ausführung die UI-Kultur des Betriebssystems ab, importieren die entsprechenden übersetzten Textzeichenfolgen und zeigen diese dem Benutzer an. Im Data-Abschnitt können Sie Textzeichenfolgen getrennt vom Code speichern, damit diese leicht identifiziert und extrahiert werden können. Das neue ConvertFrom-StringData-Cmdlet konvertiert Textzeichenfolgen in wörterbuch-ähnliche Hash-Tabellen, um die Übersetzung zu vereinfachen.
Die in Windows PowerShell 2.0 verwendeten Funktionen zur Skript-Internationalisierung werden von Windows PowerShell 1.0 nicht unterstützt. Skripts, die diese Funktionen enthalten, können in Windows PowerShell 1.0 nicht unverändert ausgeführt werden.
Zur Unterstützung von internationalem Hilfetext bietet Windows PowerShell 2.0 die folgenden Funktionen:
– einen Data-Abschnitt, der Textzeichenfolgen von Code-Anweisungen trennt. Weitere Informationen zum Data-Abschnitt finden Sie unter „about_Data_Sections“.
– die neuen automatischen Variablen $PSCulture und $PSUICulture. $PSCulture speichert den Namen der Benutzeroberflächensprache, die auf dem System für Elemente wie z. B. Datum, Uhrzeit und Währung verwendet wird. Die $PSUICulture-Variable speichert den Namen der Benutzeroberflächensprache, die auf dem System für Benutzeroberflächenelemente wie Menüs und Textzeichenfolgen verwendet wird.
– das ConvertFrom-StringData-Cmdlet, das Textzeichenfolgen in wörterbuch-ähnliche Hash-Tabellen konvertiert, um die Übersetzung zu erleichtern. Weitere Informationen finden Sie unter „ConvertFrom-StringData“.
– den neuen Dateityp psd1, in dem übersetzte Textzeichenfolgen gespeichert werden. Die psd1-Dateien werden in sprachspezifischen Unterverzeichnissen des Skript-Verzeichnisses gespeichert.
– das Import-LocalizedData-Cmdlet, das zur Laufzeit übersetzte Textzeichenfolgen für eine angegebene Sprache in ein Skript importiert. Dieses Cmdlet erkennt und importieret Zeichenfolgen in jeder von Windows unterstützten Sprache. Weitere Informationen finden Sie unter „Import-LocalizedData“.
DER DATA-ABSCHNITT: SPEICHERN VON STANDARDZEICHENFOLGEN
Verwenden Sie einen Data-Abschnitt zum Speichern der Textzeichenfolgen in der Standardsprache. Ordnen Sie die Zeichenfolgen im Schlüssel-Wert-Paaren in eine 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-Zeichenfolge in eine wörterbuch-ähnliche Hash-Tabelle, die im Wert der Data-Abschnittsvariablen gespeichert ist.
Im folgenden Beispiel enthält der Data-Abschnitt des World.ps1-Skripts den Satz „Englisch-USA (En-US)“ für Befehlszeilennmeldungen für ein Skript. Das ConvertFrom-StringData-Cmdlet konvertiert die Zeichenfolgen in eine Hash-Tabelle und speichert diese 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-Zeichenfolgen finden Sie unter „about_Quoting_Rules“.
PSD1-DATEIEN: SPEICHERN VON ÜBERSETZTEN ZEICHENFOLGEN
Die Skript-Meldungen für jede Benutzeroberflächensprache werden in separaten Textdateien mit dem gleichen Namen wie das Skript und der psd1-Dateinamenerweiterung gespeichert. Speichern Sie die Dateien in den Unterverzeichnissen des Skript-Verzeichnisses mit den Namen der Kulturen im folgenden Format:
<language>–<region>
Beispiele: de-DE, ar-SA und zh-Hans.
Wenn z. B. das World.ps1-Skript im Verzeichnis C:\Scripts gespeichert ist, würden Sie eine Verzeichnisstruktur für die Datei erstellen, die der folgenden ähnelt:
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 Skript-Verzeichnisses könnte z. B. die folgende Anweisung enthalten:
ConvertFrom-StringData @'
helloWorld = Hello, World (in German).
errorMsg1 = You cannot leave the user name field blank (in German).
promptMsg = Please enter your user name (in German).
'@
In gleicher Weise enthält die World.psd1-Datei im Unterverzeichnis „ar-SA“ des Skript-Verzeichnisses möglicherweise die folgende Anweisung:
ConvertFrom-StringData @'
helloWorld = Hello, World (in Arabic).
errorMsg1 = You cannot leave the user name field blank (in Arabic).
promptMsg = Please enter your user name (in Arabic).
'@
IMPORT-LOCALIZEDDATA: DYNAMISCHES ABRUFEN VON ÜBERSETZTEN ZEICHENFOLGEN
Zum Abrufen der Zeichenfolgen in der Benutzeroberflächensprache des aktuellen Benutzers verwenden Sie das Import-LocalizedData-Cmdlet.Abschnittstext hier einfügen.
Import-LocalizedData findet den Wert der automatischen Variablen „$PSUICulture“ und importiert den Inhalt der <Skriptname>psd1-Dateien aus dem Unterverzeichnis, das dem $PSUICulture-Wert entspricht. Anschließend wird der importierte Inhalt in der Variablen gespeichert, die durch den Wert des BindingVariable-Parameters angegeben ist.
import-localizeddata -bindingVariable msgTable
Wenn z. B. der Import-LocalizedData-Befehl im C:\Scripts\World.ps1-Skript vorkommt, und der Wert von $PSUICulture „Ar-SA“ lautet, findet Import-LocalizedData die folgende Datei:
C:\Scripts\ar-SA\World.psd1
Anschließend importiert es die arabischen Textzeichenfolgen aus der Datei in die $msgTable-Variable, wodurch die Standardzeichenfolgen ersetzt werden, die möglicherweise im Data-Abschnitt des World.ps1-Skripts definiert sind.
Das Ergebnis: Wenn das Skript die $msgTable-Variable verwendet, um Benutzermeldungen anzuzeigen, werden diese Meldungen auf Arabisch angezeigt.
Das folgende Skript zeigt beispielsweise die Meldung „Bitte geben Sie Ihren Benutzernamen ein“ auf Arabisch an:
if (!($username)) { $msgTable.promptMsg }
Wenn Import-LocalizedData keine .psd1-Datei finden kann, die dem Wert von $PSUIculture entspricht, wird der Wert von $msgTable nicht ersetzt, und beim Aufruf von $msgTable.promptMsg werden die ursprünglichen en-US-Zeichenfolgen angezeigt.
BEISPIEL
Dieses Beispiel zeigt, wie die Funktionen zur Skript-Internationalisierung in einem Skript verwendet werden, um Benutzern den Wochentag in der Sprache anzuzeigen, die auf dem Computer festgelegt ist.
Im Folgenden finden eine vollständige Auflistung der Sample1.ps1-Skriptdatei.
Das Skript beginnt mit einem Data-Abschnitt namens „Day“ ($Day), der einen ConvertFrom-StringData-Befehl enthält. Der an ConvertFrom-StringData gesendete Ausdruck ist eine here-Zeichenfolge, welche in Form von Schlüssel-Wert-Paaren die Namen der Wochentage in der Standard-UI-Kultur „en-US“ enthält. Das ConvertFrom-StringData-Cmdlet konvertiert die Schlüssel-Wert-Paare in der here-Zeichenfolge in eine Hash-Tabelle und speichert diese dann im Wert der $Day-Variablen.
Der Import-LocalizedData-Befehl importiert den Inhalt der .psd1-Datei aus dem Verzeichnis, das dem Wert der automatischen Variablen „$PSUICulture“ entspricht, und speichert ihn dann in der $Day-Variablen, wobei die Werte von $Day ersetzt werden, die im Data-Abschnitt definiert sind.
Die restlichen Befehle laden die Zeichenfolgen in ein Array und zeigen sie an.
$Day = DATA {
# culture=\"en-US\"
ConvertFrom-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 den Unterverzeichnissen des Skript-Verzeichnisses gespeichert, und zwar mit Namen, die den Werten von $PSUICulture entsprechen.
Im Folgenden finden Sie eine vollständige Auflistung von .\de-DE\sample1.psd1:
# culture=\"de-DE\"
ConvertFrom-StringData @'
messageDate = Today is
d0 = Sunday (in German)
d1 = Monday (in German)
d2 = Tuesday (in German)
d3 = Wednesday (in German)
d4 = Thursday (in German)
d5 = Friday (in German)
d6 = Saturday (in German)
'@
Das Ergebnis: Wenn Sie Sample.ps1 auf einem System ausführen, auf dem der $PSUICulture-Wert „de-DE“ ist, lautet die Ausgabe des Skripts:
Today is Friday (in German)
SIEHE AUCH
about_Data_Sections
about_Automatic_Variables
about_Hash_Tables
about_Quoting_Rules
ConvertFrom-StringData
Import-LocalizedData