about_Script_Internationalization

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

항목

about_Script_Internationalization

간단한 설명

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

자세한 설명

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

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

스크립트 국제화에 사용되는 Windows PowerShell 2.0 기능은 Windows PowerShell 1.0에서 지원되지 않습니다. 이러한 기능이 포함된 스크립트는 수정해야 Windows PowerShell 1.0에서 실행됩니다.

국가별 도움말 텍스트를 지원하기 위해 Windows PowerShell 2.0에는 다음과 같은 기능이 포함되어 있습니다.

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

  • -- 새로운 자동 변수, $PSCulture 및$PSUICulture입니다. $PSCulture에는 시스템에서 날짜, 시간, 통화 등의 요소에 사용되는 UI 언어의 이름이 저장됩니다. $PSUICulture 변수에는 시스템에서 메뉴, 텍스트 문자열 등의 사용자 인터페이스 요소에 사용되는 UI 언어의 이름이 저장됩니다.

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

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

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

DATA 섹션: 기본 문자열 저장

스크립트의 Data 섹션을 사용하여 텍스트 문자열을 기본 언어로 저장합니다. here-string에서 키/값 쌍으로 문자열을 정렬합니다. 각 키/값 쌍은 별도의 줄에 있어야 합니다. 설명을 포함하는 경우 설명도 별도의 줄에 있어야 합니다.

ConvertFrom-StringData cmdlet은 here-string의 키/값 쌍을 Data 섹션 변수의 값에 저장되는 사전과 유사한 해시 테이블로 변환합니다.

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

here-string에 대한 자세한 내용은 about_Quoting_Rules를 참조하세요.

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

스크립트와 이름이 같고 파일 이름 확장명이 .psd1인 별도의 텍스트 파일에 각 UI 언어에 대한 스크립트 메시지를 저장합니다. 이러한 파일을 다음 형식으로 문화권의 이름이 포함된 스크립트 디렉터리의 하위 디렉터리에 저장합니다.

        <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 @'
            helloWorld = Hello, World (in German).
            errorMsg1 = You cannot leave the user name field blank (in German).
            promptMsg = Please enter your user name (in German).
        '@

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

        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: 번역된 문자열의 동적 검색

현재 사용자의 UI 언어로 된 문자열을 검색하려면 Import-LocalizedData cmdlet을 사용합니다. 여기에 섹션 본문을 삽입합니다.

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 스크립트의 Data 섹션에 정의될 수 있는 모든 기본 문자열을 대체합니다.

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

예를 들어 다음 스크립트에서는 "Please enter your username"이라는 메시지를 아랍어로 표시합니다.

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

Import-LocalizedData를 통해 $PSUIculture의 값과 일치하는 .psd1 파일을 찾을 수 없는 경우 $msgTable의 값이 대체되지 않으며 $msgTable.promptMsg를 호출하여 대체 en-US 문자열을 표시합니다.

예제

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

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

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

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

나머지 명령은 문자열을 배열로 로드하여 표시합니다.

        $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

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

다음은 .\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)
        '@

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

        Today is Friday (in German)

참고 항목

about_Data_Sections

about_Automatic_Variables

about_Hash_Tables

about_Quoting_Rules

ConvertFrom-StringData

Import-LocalizedData