다음을 통해 공유


about_Script_Internationalization

간단한 설명

스크립트가 UI(사용자 인터페이스) 언어로 사용자에게 메시지와 지침을 쉽게 표시할 수 있도록 하는 스크립트 국제화 기능에 대해 설명합니다.

자세한 설명

PowerShell 스크립트 국제화 기능을 사용하면 사용자의 언어로 도움말 및 사용자 메시지를 표시하여 전 세계 사용자에게 더 나은 서비스를 제공할 수 있습니다.

스크립트 국제화 기능은 실행 중에 운영 체제의 UI 문화권을 쿼리하고, 번역된 적절한 텍스트 문자열을 가져오고, 사용자에게 표시합니다. 데이터 섹션을 사용하면 텍스트 문자열을 코드와 분리하여 쉽게 식별하고 추출할 수 있습니다. 새 cmdlet ConvertFrom-StringData은 번역을 용이하게 하기 위해 텍스트 문자열을 사전과 유사한 해시 테이블로 변환합니다.

PowerShell은 국제 도움말 텍스트를 지원하기 위해 다음 기능을 포함합니다.

  • 텍스트 문자열을 코드 명령과 구분하는 데이터 섹션입니다. 데이터 섹션에 대한 자세한 내용은 about_Data_Sections 참조하세요.

  • 새 자동 변수 및 $PSUICulture. $PSCulture $PSCulture 는 날짜, 시간 및 통화와 같은 요소에 대해 시스템에서 사용되는 UI 언어의 이름을 저장합니다. 변수는 $PSUICulture 메뉴 및 텍스트 문자열과 같은 사용자 인터페이스 요소에 대해 시스템에서 사용되는 UI 언어의 이름을 저장합니다.

  • 번역을 용이하게 하기 위해 텍스트 문자열을 사전과 유사한 해시 테이블로 변환하는 cmdlet ConvertFrom-StringData입니다. 자세한 내용은 ConvertFrom-StringData를 참조하세요.

  • 번역된 텍스트 문자열을 저장하는 새 파일 형식 .psd1입니다. 파일은 .psd1 스크립트 디렉터리의 언어별 하위 디렉터리에 저장됩니다.

  • 지정된 언어의 번역된 텍스트 문자열을 런타임에 스크립트로 가져오는 cmdlet Import-LocalizedData입니다. 이 cmdlet은 Windows 지원 언어로 문자열을 인식하고 가져옵니다. 자세한 내용은 Import-LocalizedData를 참조 하세요.

데이터 섹션: 기본 문자열 저장

스크립트의 데이터 섹션을 사용하여 텍스트 문자열을 기본 언어로 저장합니다. 여기에 있는 문자열의 키/값 쌍으로 문자열을 정렬합니다. 각 키/값 쌍은 별도의 줄에 있어야 합니다. 메모를 포함하는 경우 주석은 별도의 줄에 있어야 합니다.

cmdlet은 ConvertFrom-StringData 여기 문자열의 키/값 쌍을 데이터 섹션 변수의 값에 저장된 사전과 유사한 해시 테이블로 변환합니다.

다음 예제에서 스크립트의 World.ps1 데이터 섹션에는 스크립트에 대한 프롬프트 메시지의 영어 미국(en-US) 집합이 포함되어 있습니다. cmdlet은 ConvertFrom-StringData 문자열을 해시 테이블로 변환하고 변수에 $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.
'@
}

여기 문자열에 대한 자세한 내용은 about_Quoting_Rules 참조하세요.

PSD1 파일: 번역된 문자열 저장

각 UI 언어에 대한 스크립트 메시지를 스크립트 및 .psd1 파일 이름 확장명과 동일한 이름의 별도 텍스트 파일에 저장합니다. 다음 형식의 문화권 이름을 사용하여 스크립트 디렉터리의 하위 디렉터리에 파일을 저장합니다.

<language>-<region>

예: de-DE, ar-SA 및 zh-Hans

예를 들어 스크립트가 World.ps1 디렉터리에 저장된 C:\Scripts 경우 다음과 유사한 파일 디렉터리 구조를 만듭니다.

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

스크립트 디렉터리의 de-DE 하위 디렉터리에 있는 파일에는 World.psd1 다음 문이 포함될 수 있습니다.

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

마찬가지로 World.psd1 스크립트 디렉터리의 ar-SA 하위 디렉터리에 있는 파일에는 다음 문이 포함될 수 있습니다.

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

Import-LocalizedData: 번역된 문자열의 동적 검색

현재 사용자의 UI 언어로 문자열을 검색하려면 cmdlet을 Import-LocalizedData 사용합니다.

Import-LocalizedData는 자동 변수의 $PSUICulture 값을 찾고 값과 일치하는 $PSUICulture 하위 디렉터리에서 파일의 <script-name>.psd1 콘텐츠를 가져옵니다. 그런 다음 가져온 콘텐츠를 BindingVariable 매개 변수 값으로 지정된 변수에 저장합니다.

Import-LocalizedData -BindingVariable msgTable

예를 들어 명령이 Import-LocalizedData 스크립트에 C:\Scripts\World.ps1 표시되고 값 $PSUICulture 이 "ar-SA"인 Import-LocalizedData 경우 다음 파일을 찾습니다.

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

그런 다음, 파일의 아랍어 텍스트 문자열을 변수로 가져와 $msgTable 스크립트의 데이터 섹션에 정의될 수 있는 모든 기본 문자열을 World.ps1 바꿉니다.

따라서 스크립트가 변수를 $msgTable 사용하여 사용자 메시지를 표시하면 메시지가 아랍어로 표시됩니다.

예를 들어 다음 스크립트는 아랍어로 "사용자 이름을 입력하세요" 메시지를 표시합니다.

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

$PSUIculture과 일치하는 파일을 찾을 .psd1 수 없는 경우 Import-LocalizedData$msgTable 이 대체되지 않고 대체(fallback) en-US 문자열을 표시하는 호출 $msgTable.promptMsg 이 표시됩니다.

예제

이 예제에서는 스크립트 국제화 기능을 스크립트에서 사용하여 컴퓨터에서 설정된 언어로 사용자에게 요일을 표시하는 방법을 보여줍니다.

다음은 Sample1.ps1 스크립트 파일의 전체 목록입니다.

스크립트는 명령이 포함된 Day($Day)라는 데이터 섹션으로 ConvertFrom-StringData 시작합니다. 제출된 ConvertFrom-StringData 식은 키/값 쌍의 기본 UI 문화권 en-US에 있는 일 이름을 포함하는 here-string입니다. cmdlet은 ConvertFrom-StringData 여기 문자열의 키/값 쌍을 해시 테이블로 변환한 다음 변수 값 $Day 에 저장합니다.

Import-LocalizedData 명령은 자동 변수의 .psd1 값과 일치하는 디렉터리에서 파일의 $PSUICulture 내용을 가져온 다음 변수에 $Day 저장하여 데이터 섹션에 정의된 값을 $Day 바꿉니다.

다시 기본 명령은 문자열을 배열에 로드하고 표시합니다.

$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

스크립트를 지원하는 파일은 .psd1 값과 일치하는 $PSUICulture 이름을 사용하여 스크립트 디렉터리의 하위 디렉터리에 저장됩니다.

다음은 전체 목록입니다 .\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
'@

따라서 값 $PSUICulture 이 de-DE인 시스템에서 Sample.ps1을 실행하면 스크립트의 출력은 다음과 같습니다.

Heute ist Freitag

참고 항목