THEMA
about_Script_Internationalization
KURZBESCHREIBUNG
Beschreibt die Skriptinternationalisierungsfeatures von Windows
PowerShell 2.0, mit denen mit Skripts leicht Meldungen und
Anweisungen für Benutzer in ihrer Benutzeroberflächensprache
angezeigt werden können.
DETAILBESCHREIBUNG
Mit den Skriptinternationalisierungsfeatures in Windows
PowerShell können Sie Benutzern weltweit eine höhere
Benutzerfreundlichkeit bieten, indem Hilfe und Benutzermeldungen
für Skripts und Funktionen in der Benutzeroberflächensprache des
Benutzers angezeigt werden.
Die Skriptinternationalisierungsfeatures fragen während der
Ausführung die Benutzeroberflächenkultur des Betriebssystems ab,
importieren die entsprechenden übersetzten Textzeichenfolgen und
zeigen sie für den Benutzer an. Im Datenabschnitt können Sie
Textzeichenfolgen getrennt von Code speichern, sodass sie bequem
identifiziert und extrahiert werden können. Das neue Cmdlet
"ConvertFrom-StringData" konvertiert Textzeichenfolgen in
wörterbuchähnliche Hashtabellen, um die Übersetzung zu erleichtern.
Die bei der Skriptinternationalisierung verwendeten Windows
PowerShell 2.0-Features werden von Windows PowerShell 1.0 nicht
unterstützt. Skripts, die diese Features enthalten, werden in
Windows PowerShell 1.0 nicht ohne Änderungen ausgeführt.
Zum Unterstützen von internationalem Hilfetext umfasst Windows
PowerShell 2.0 die folgenden Features:
-- Ein Datenabschnitt, mit dem Textzeichenfolgen von
Codeanweisungen getrennt werden. Weitere Informationen zum
Datenabschnitt finden Sie unter "about_Data_Sections".
-- Neue automatische Variablen ("$PSCulture" und
"$PSUICulture"). Mit "$PSCulture" wird der Name der
Benutzeroberflächensprache gespeichert, die im System für
Elemente wie Datum, Uhrzeit und Währung verwendet wird. In
der $PSUICulture-Variablen wird der Name der Benutzerober-
flächensprache gespeichert, die im System für Benutzerober-
flächenelemente wie Menüs und Textzeichenfolgen verwendet
wird.
-- Das Cmdlet "ConvertFrom-StringData", das Textzeichenfolgen
in wörterbuchähnliche Hashtabellen konvertiert, um die
Übersetzung zu erleichtern. Weitere Informationen finden
Sie unter "ConvertFrom-StringData".
-- Der neue Dateityp ".psd1", in dem übersetzte Textzeichenfol-
gen gespeichert werden. Die PSD1-Dateien werden in
sprachspezifischen Unterverzeichnissen des Skriptverzeich-
nisses gespeichert.
-- Das Cmdlet "Import-LocalizedData", mit dem übersetzte
Textzeichenfolgen für eine angegebene Sprache zur Laufzeit
in ein Skript importiert werden. Dieses Cmdlet erkennt und
importiert Zeichenfolgen in allen von Windows unterstützten
Sprachen. Weitere Informationen finden Sie unter
"Import-LocalizedData".
DER DATENABSCHNITT: Speichern von Standardzeichenfolgen
Verwenden Sie im Skript einen Datenabschnitt, 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 in einer
eigenen Zeile aufgeführt werden. Wenn Sie Kommentare
einschließen, müssen sich die Kommentare in separaten Zeilen
befinden.
Das Cmdlet "ConvertFrom-StringData" konvertiert die
Schlüssel-Wert-Paare in der here-Zeichenfolge in eine
wörterbuchähnliche Hashtabelle, die im Wert der Datenabschnitts-
variablen gespeichert wird.
Im folgenden Beispiel enthält der Datenabschnitt des Skripts
"Welt.ps1" den Satz von Aufforderungsmeldungen für Englisch
(USA) (en-US) für ein Skript. Das Cmdlet "ConvertFrom-StringData"
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-Zeichenfolgen finden Sie unter "about_Quoting_Rules".
PSD1-DATEIEN: Speichern von übersetzten Zeichenfolgen
Speichern Sie die Skriptmeldungen für die einzelnen
Benutzeroberflächensprachen in separaten Textdateien mit dem
gleichen Namen wie das Skript und der PSD1-Dateinamenerweiterung.
Speichern Sie die Dateien in Unterverzeichnissen des
Skriptverzeichnisses mit den Namen der Kulturen im folgenden Format:
<Sprache>-<Region>
Beispiele: de-DE, ar-SA und zh-CN
Wenn das Skript "Welt.ps1" z. B. im Verzeichnis "C:\Skripts"
gespeichert wird, würden Sie eine Dateiverzeichnisstruktur
erstellen, die etwa folgendermaßen aussieht:
C:\Skripts
C:\Skripts\Welt.ps1
C:\Skripts\de-DE\Welt.psd1
C:\Skripts\ar-SA\Welt.psd1
C:\Skripts\zh-CN\Welt.psd1
...
Die Datei "Welt.psd1" im Unterverzeichnis "de-DE" des
Skriptverzeichnisses könnte die folgende Anweisung enthalten:
ConvertFrom-StringData @'
helloWorld = Hallo, Welt. (auf Deutsch)
errorMsg1 = Das Feld für den Benutzernamen darf nicht leer sein. (auf Deutsch)
promptMsg = Geben Sie Ihren Benutzernamen ein. (auf Deutsch)
'@
Entsprechend kann die Datei "Welt.psd1" im Unterverzeichnis
"ar-SA" des Skriptverzeichnisses die folgende Anweisung enthalten:
ConvertFrom-StringData @'
helloWorld = Hallo, Welt. (auf Arabisch)
errorMsg1 = Das Feld für den Benutzernamen darf nicht leer sein. (auf Arabisch)
promptMsg = Geben Sie Ihren Benutzernamen ein. (auf Arabisch)
'@
IMPORT-LOCALIZEDDATA: Dynamischer Abruf übersetzter Zeichenfolgen
Rufen Sie die Zeichenfolgen in der Benutzeroberflächensprache des
aktuellen Benutzers mit dem Cmdlet "Import-LocalizedData" ab.
Mit "Import-LocalizedData" wird der Wert der automatischen
$PSUICulture-Variablen gesucht und der Inhalt der
<Skriptname>.psd1-Dateien in das Unterverzeichnis importiert,
das dem $PSUICulture-Wert entspricht. Danach wird der importierte
Inhalt in der vom Wert des BindingVariable-Parameters angegebenen
Variablen gespeichert.
import-localizeddata -bindingVariable msgTable
Wenn z. B. der Befehl "Import-LocalizedData" im Skript
"C:\Skripts\Welt.ps1" angezeigt wird und der Wert von
$PSUICulture "ar-SA" lautet, sucht "Import-LocalizedData" die
folgende Datei:
C:\Skripts\ar-SA\Welt.psd1
Danach werden die arabischen Textzeichenfolgen aus der Datei in
die $msgTable-Variable importiert. Dabei werden alle
Standardzeichenfolgen ersetzt, die im Datenabschnitt des Skripts
"Welt.ps1" definiert sind.
Wenn das Skript Benutzermeldungen mithilfe der $msgTable-Variablen
anzeigt, werden die Meldungen daher auf Arabisch angezeigt.
Mit dem folgenden Skript wird z. B. die Meldung "Geben Sie Ihren
Benutzernamen ein" auf Arabisch angezeigt:
if (!($username)) { $msgTable.promptMsg }
Wenn "Import-LocalizedData" keine PSD1-Datei findet, die mit dem
Wert von "$PSUIculture" übereinstimmt, wird der Wert von
"$msgTable" nicht ersetzt, und mit dem Aufruf von
"$msgTable.promptMsg" werden die Fallback-Zeichenfolgen für
en-US angezeigt.
BEISPIEL:
In diesem Beispiel wird gezeigt, wie die Skriptinternationalisie-
rungsfeatures in einem Skript verwendet werden, um einen Wochentag
für die Benutzer in der Sprache anzuzeigen, die auf dem Computer
festgelegt ist.
Im Folgenden wird die Skriptdatei "Beispiel1.ps1" vollständig
dargestellt.
Das Skript beginnt mit dem Datenbereich "Day" ($Day), der einen
ConvertFrom-StringData-Befehl enthält. Der an "ConvertFrom-
StringData" gesendete Ausdruck ist eine here-Zeichenfolge, die
die Namen der Tage in der Standardbenutzeroberflächenkultur
(en-US) in Schlüssel-Wert-Paaren enthält. Das Cmdlet "ConvertFrom-
StringData" konvertiert die Schlüssel-Wert-Paare in der here-
Zeichenfolge in eine Hashtabelle und speichert sie dann im Wert
der $Day-Variablen.
Mit dem Befehl "Import-LocalizedData" wird den Inhalt der
PSD1-Datei in dem Verzeichnis importiert, das dem Wert der
automatischen $PSUICulture-Variablen entspricht, und in der
$Day-Variablen gespeichert. Dabei werden die im Datenabschnitt
definierten Werte von "$Day" ersetzt.
Mit den verbleibenden Befehlen werden die Zeichenfolgen in ein
Array geladen und angezeigt.
$Day = DATA {
# culture=\\"en-US\\"
ConvertFrom-StringData @'
messageDate = Today is
d1 = Monday
d2 = Tuesday
d3 = Wednesday
d4 = Thursday
d5 = Friday
d6 = Saturday
d7 = Sunday
'@
}
Import-LocalizedData -BindingVariable Day
# Erstellen eines Arrays mit Wochentagen.
$a = $Day.d1, $Day.d2, $Day.d3, $Day.d4, $Day.d5, $Day.d6, $Day.d7
# Abrufen des Wochentags als Zahl (Montag = 1).
# Index für $a, um den Namen des Tags abzurufen.
# Erstellen eines Satzes mit der Zeichenfolgenformatierung.
"{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 wird ".\de-DE\beispiel1.psd1" vollständig aufgeführt:
# culture=\\"de-DE\\"
ConvertFrom-StringData @'
messageDate = Heute ist
d1 = Montag
d2 = Dienstag
d3 = Mittwoch
d4 = Donnerstag
d5 = Freitag
d6 = Samstag
d7 = Sonntag
'@
Wenn Sie daher "Beispiel.ps1" in einem System ausführen, auf dem
"de-DE" der Wert von "$PSUICulture" ist, gibt das Skript
Folgendes aus:
Heute ist Freitag
SIEHE AUCH
about_Data_Sections
about_Automatic_Variables
about_Hash_Tables
about_Quoting_Rules
ConvertFrom-StringData
Import-LocalizedData