Udostępnij za pośrednictwem


o_Internacjonalizacji_Skryptu

Krótki opis

Opisuje funkcje internacjonalizacji skryptów, które ułatwiają wyświetlanie komunikatów i instrukcji dla użytkowników w języku interfejsu użytkownika.

Długi opis

Funkcje międzynarodowych skryptów programu PowerShell umożliwiają lepszą obsługę użytkowników na całym świecie dzięki wyświetlaniu komunikatów pomocy i użytkowników w języku użytkownika.

Funkcje internacjonalizacji skryptów sprawdzają kulturę interfejsu użytkownika systemu operacyjnego w trakcie wykonywania, importują odpowiednie przetłumaczone ciągi tekstowe i wyświetlają je użytkownikowi. Sekcja Dane umożliwia przechowywanie ciągów tekstowych oddzielnych od kodu, dzięki czemu można je łatwo zidentyfikować i wyodrębnić. Nowe polecenie cmdlet, ConvertFrom-StringData, konwertuje ciągi tekstowe na tabele skrótów przypominające słownik, aby ułatwić tłumaczenie.

Aby obsługiwać międzynarodowy tekst pomocy, program PowerShell zawiera następujące funkcje:

  • Sekcja Dane oddzielająca ciągi tekstowe od instrukcji kodu. Aby uzyskać więcej informacji na temat sekcji Dane, zobacz about_Data_Sections.

  • Nowe zmienne automatyczne, $PSCulture i $PSUICulture. $PSCulture przechowuje nazwę języka interfejsu użytkownika używanego w systemie dla elementów, takich jak data, godzina i waluta. Zmienna $PSUICulture przechowuje nazwę języka interfejsu użytkownika używanego w systemie dla elementów interfejsu użytkownika, takich jak menu i ciągi tekstowe.

  • Polecenie cmdlet, ConvertFrom-StringData, które konwertuje ciągi tekstowe na tabele skrótów przypominające słownik, aby ułatwić tłumaczenie. Aby uzyskać więcej informacji, zobacz ConvertFrom-StringData.

  • Nowy typ pliku, .psd1, który przechowuje przetłumaczone ciągi tekstowe. Pliki .psd1 są przechowywane w podkatalogach specyficznych dla języka katalogu skryptów.

  • Polecenie cmdlet, Import-LocalizedData, które importuje przetłumaczone ciągi tekstowe dla określonego języka do skryptu w czasie wykonywania. To polecenie cmdlet rozpoznaje i importuje ciągi w dowolnym języku obsługiwanym przez system Windows. Aby uzyskać więcej informacji, zobacz Import-LocalizedData.

Sekcja danych: przechowywanie ciągów domyślnych

Użyj sekcji Dane w skryscie, aby przechowywać ciągi tekstowe w języku domyślnym. Rozmieść ciągi w parach klucz/wartość w dosłownym ciągu tekstowym. Każda para klucz/wartość musi znajdować się w osobnym wierszu. W przypadku uwzględnienia komentarzy komentarze muszą znajdować się w osobnych wierszach.

Polecenie cmdlet ConvertFrom-StringData konwertuje pary klucz/wartość w tym ciągu na tabelę skrótów przypominającą słownik, która jest przechowywana w wartości zmiennej sekcji Dane.

W poniższym przykładzie sekcja Dane skryptu „World.ps1” zawiera zestaw komunikatów dla skryptu „English-United States” („en-US”). Polecenie cmdlet ConvertFrom-StringData konwertuje ciągi na tabelę skrótów i przechowuje je w zmiennej $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.
'@
}

Aby uzyskać więcej informacji na temat here-string, zapoznaj się z about_Quoting_Rules.

Pliki PSD1: przechowywanie przetłumaczonych ciągów

Zapisz komunikaty skryptu dla każdego języka interfejsu użytkownika w osobnych plikach tekstowych o tej samej nazwie co skrypt i rozszerzenie nazwy pliku .psd1. Zapisz pliki w podkatalogach katalogu script z nazwami kultur w następującym formacie:

<language>-<region>

Przykłady: de-DE, ar-SAi zh-Hans

Jeśli na przykład skrypt World.ps1 jest przechowywany w katalogu C:\Scripts, należy utworzyć strukturę katalogów plików podobną do następującej:

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

Plik World.psd1 w podkatalogu de-DE katalogu script może zawierać następującą instrukcję:

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

Podobnie plik World.psd1 w podkatalogu ar-SA katalogu script może zawierać następującą instrukcję:

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

Import-LocalizedData: dynamiczne pobieranie przetłumaczonych ciągów

Aby pobrać ciągi w języku interfejsu użytkownika aktualnie zalogowanego użytkownika, użyj polecenia cmdlet Import-LocalizedData.

Import-LocalizedData znajduje wartość zmiennej automatycznej $PSUICulture i importuje zawartość plików <script-name>.psd1 w podkatalogu zgodnym z wartością $PSUICulture. Następnie zapisuje zaimportowaną zawartość w zmiennej określonej przez wartość parametru BindingVariable.

Import-LocalizedData -BindingVariable msgTable

Jeśli na przykład polecenie Import-LocalizedData pojawi się w skryfcie C:\Scripts\World.ps1, a wartość $PSUICulture to "ar-SA", Import-LocalizedData znajdzie następujący plik:

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

Następnie importuje arabskie ciągi tekstowe z pliku do zmiennej $msgTable, zastępując wszystkie ciągi domyślne, które mogą być zdefiniowane w sekcji Dane skryptu World.ps1.

W związku z tym, gdy skrypt używa zmiennej $msgTable do wyświetlania komunikatów użytkownika, komunikaty są wyświetlane w języku arabskim.

Na przykład poniższy skrypt wyświetla komunikat "Wprowadź nazwę użytkownika" w języku arabskim:

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

Jeśli Import-LocalizedData nie można odnaleźć pliku .psd1 zgodnego z wartością $PSUICulture, wartość $msgTable nie zostanie zamieniona, a wywołanie $msgTable.promptMsg wyświetla ciągi en-US rezerwowych.

Przykłady

W tym przykładzie pokazano, w jaki sposób funkcje międzynarodowych skryptów są używane w skrycie do wyświetlania dnia tygodnia użytkownikom w języku ustawionym na komputerze.

Poniżej znajduje się pełna lista pliku skryptu Sample1.ps1.

Skrypt rozpoczyna się od sekcji Dane o nazwie Day ($Day), która zawiera polecenie ConvertFrom-StringData. Wyrażenie przesłane do ConvertFrom-StringData jest ciągiem tutaj zawierającym nazwy dni w domyślnej kulturze interfejsu użytkownika, en-US, w parach klucz/wartość. Polecenie cmdlet ConvertFrom-StringData konwertuje pary klucz/wartość w tym ciągu na tabelę skrótów, a następnie zapisuje je w wartości zmiennej $Day.

Polecenie Import-LocalizedData importuje zawartość pliku .psd1 w katalogu zgodnym z wartością zmiennej automatycznej $PSUICulture, a następnie zapisuje ją w zmiennej $Day, zastępując wartości $Day zdefiniowanych w sekcji Dane.

Pozostałe polecenia ładują ciągi do tablicy i wyświetlają je.

$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

Pliki .psd1, które obsługują skrypt, są zapisywane w podkatalogach katalogu skryptu z nazwami zgodnymi z wartościami $PSUICulture.

Poniżej znajduje się pełna lista .\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
'@

W związku z tym po uruchomieniu Sample.ps1 w systemie, w którym wartość $PSUICulture jest de-DE, dane wyjściowe skryptu to:

Heute ist Freitag

Zobacz także