연습: ASP.NET에서 지역화를 위해 리소스 사용

업데이트: 2007년 11월

지역화된 웹 페이지를 만드는 효과적인 방법은 사용자의 언어와 culture에 따라 페이지의 텍스트와 컨트롤에 대한 리소스를 사용하는 것입니다. 리소스 개체에 배치된 속성을 사용하면 ASP.NET에서 사용자의 언어와 culture에 따라 런타임 시 올바른 속성을 선택할 수 있으며 프로세스가 비교적 간단합니다.

  • 리소스 파일(.resx)이 값을 저장합니다.

  • 페이지에서 컨트롤이 속성 값으로 리소스를 사용하도록 지정합니다.

  • 런타임 시 컨트롤의 속성 값이 리소스 파일로부터 파생됩니다.

    참고:

    실제로 데이터베이스와 같은 사용자 지정 리소스 개체에 값을 저장할 수 있습니다. 그러나 이 연습에서는 .resx 파일을 사용하여 값을 저장합니다.

Visual Web Developer를 사용하면 코드를 작성하지 않고 컨트롤용 리소스, 컨트롤 속성 및 컨트롤용 HTML을 생성할 수 있습니다.

이 연습에서 수행할 작업은 다음과 같습니다.

  • ASP.NET 페이지의 지역화 설정

  • 리소스 파일 생성 및 해당 값과 응용 프로그램의 컨트롤을 암시적으로 연결

  • 지역화 리소스 파일 만들기 및 선언적 식을 사용하여 페이지에서 명시적으로 참조

사전 요구 사항

이 연습을 완료하려면 다음과 같은 요건을 갖추어야 합니다.

  • Visual Web Developer(Visual Studio)

  • .NET Framework

웹 사이트 만들기

Visual Web Developer에서 웹 사이트를 이미 만들었으면(연습: Visual Web Developer에서 기본 웹 페이지 만들기 참조) 해당 웹 사이트를 사용하고 다음 "ASP.NET을 사용하여 암시적 지역화" 단원으로 이동합니다. 그렇지 않으면 다음 절차의 단계에 따라 새 웹 사이트와 페이지를 만듭니다.

파일 시스템 웹 사이트를 만들려면

  1. Visual Web Developer를 엽니다.

  2. 파일 메뉴에서 새웹 사이트를 클릭합니다.

    새 웹 사이트 대화 상자가 나타납니다.

  3. Visual Studio에 설치되어 있는 템플릿에서 ASP.NET 웹 사이트를 클릭합니다.

  4. 위치 상자에 웹 사이트의 페이지를 보관할 폴더의 이름을 입력합니다.

    예를 들어, 폴더 이름 C:\WebSites를 입력합니다.

  5. 언어 목록에서 작업할 프로그래밍 언어를 클릭합니다.

  6. 확인을 클릭합니다.

    Visual Web Developer에서 해당 폴더와 Default.aspx라는 새 페이지를 만듭니다.

ASP.NET을 사용하여 암시적 지역화

이 단원에서는 암시적 지역화 작업을 수행합니다. 암시적 지역화의 경우 자동으로 리소스 파일에서 컨트롤 속성을 읽도록 지정하지만 지역화할 속성을 명시적으로 지정할 필요는 없습니다. 그런 다음 특정 속성에 대한 지역화된 값이 포함된 리소스 파일을 만듭니다. 런타임 시 ASP.NET은 페이지의 컨트롤을 검사합니다. 컨트롤에 암시적 지역화를 사용하라는 표시가 있으면 ASP.NET은 해당 페이지에 대한 리소스 파일을 확인합니다. 표시된 컨트롤에 대한 속성 설정을 찾으면 ASP.NET에서 컨트롤의 값을 리소스 파일의 값으로 대체합니다.

이 암시적 지역화의 예제에서는 디자이너와 리소스 편집기를 함께 사용하여 두 언어의 지역화를 위한 시작점으로 사용할 기본 리소스 파일을 생성합니다. Visual Web Developer는 페이지의 컨트롤만을 기반으로 하여 리소스 파일을 생성하므로 단추, 레이블, 텍스트 상자 등의 간단한 컨트롤을 포함하여 페이지의 컨트롤 레이아웃을 완성한 후 리소스 파일을 생성하는 것이 좋습니다.

페이지에 컨트롤을 배치하려면

  1. 솔루션 탐색기에서 Default.aspx를 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 Sample.aspx를 입력합니다.

    암시적 리소스 파일 이름으로 페이지 이름을 사용하기 때문에 이렇게 하면 이 연습의 나머지 부분에서 기본 리소스 파일과 관련된 혼동을 피할 수 있습니다.

  2. Sample.aspx를 열고 디자인 뷰로 전환합니다.

  3. 도구 상자의 표준 섹션에서 Button, Label 및 TextBox 컨트롤을 페이지로 끌어 옵니다.

  4. 각 컨트롤의 Text를 각각 English Button, English Label 및 English TextBox로 설정합니다.

페이지를 만들고 컨트롤을 추가한 후 Visual Web Developer 명령을 사용하여 이 페이지에 대한 로컬 리소스 파일을 생성할 수 있습니다. 로컬 리소스 파일에는 페이지 컨트롤의 리소스 문자열이 포함됩니다. Visual Web Developer는 컨트롤 내부에서 지역화 가능한 것으로 지정된 각 속성의 리소스 문자열을 생성합니다. 텍스트 기반 속성은 대부분 지역화 가능한 것으로 표시되지만 각 컨트롤에서 지역화 가능한 것으로 지정되는 속성은 다를 수 있습니다.

자동으로 리소스 파일을 생성하려면

  1. 디자이너 화면이나 컨트롤을 클릭합니다.

  2. 도구 메뉴에서 로컬 리소스 생성을 클릭합니다.

    Visual Web Developer는 App_LocalResources라는 새 폴더를 만들고 App_LocalResources 폴더 내에 Sample.aspx.resx라는 새 파일을 만듭니다. 페이지에 Sample.aspx 이외의 이름을 지정한 경우 .resx 파일은 선택한 이름을 반영합니다. 암시적 지역화를 사용할 때 리소스 파일 이름은 개별 페이지 이름을 기반으로 합니다.

  3. 소스 뷰로 전환하여 컨트롤 선언의 변경 내용을 확인합니다.

    Visual Web Developer는 새로 만든 리소스 파일에서 값을 검색하기 위해 컨트롤에 특성을 추가했습니다. 예를 들어, Button 컨트롤의 태그에는 새로운 meta:resourcekey 특성이 있습니다.

    <asp:Button ID="Button1" Runat="server" meta:resourcekey="ButtonResource1" Text="English Button" />
    

브라우저에서 웹 서버로 요청을 보낼 때 현재 언어와 culture에 대한 정보가 요청에 포함될 수 있습니다. 예를 들어, 특정 브라우저는 미국 영어를 사용하도록 설정되었음을 나타내기 위해 문자열 "en-us"를 전송하고 다른 브라우저는 영국 영어를 사용하도록 설정되었음을 나타내기 위해 문자열 "en-gb"를 전송할 수 있습니다.

참고:

브라우저 요청의 언어 및 culture 설정은 사용자의 기본 언어를 검색하는 완전히 신뢰할 수 있는 방법은 아닙니다. 이 설정은 브라우저에서 전송하도록 설정된 항목이나 기본 운영 체제에서 상속한 항목만 나타냅니다. 이 연습에서는 언어 및 culture 설정을 사용하지만 프로덕션 응용 프로그램에는 수동으로 언어와 culture를 선택하는 방법도 포함시켜야 합니다.

리소스 파일은 모든 요청에 대해 기본 리소스 파일로 사용되며 대체(fallback) culture의 리소스 파일입니다. 브라우저에서 culture를 지정하지 않거나 브라우저 요청에 지원하지 않는 언어 또는 culture가 포함되어 있으면 이 기본 파일에서 리소스 값을 가져옵니다.

이제 리소스 파일을 만들었으므로 리소스 편집기를 사용하여 파일 내에 지역화된 텍스트를 배치할 수 있습니다.

리소스 편집기를 사용하여 리소스 파일을 편집하려면

  1. 솔루션 탐색기에서 Sample.aspx.resx를 엽니다.

    리소스 편집기의 값 아래에는 페이지에 배치한 각 컨트롤의 Text 속성이 있습니다. 여기서 값을 변경하면 기본 culture의 값이 변경됩니다.

  2. ButtonResource1.Text를 Edited English Text로 설정합니다.

  3. 파일을 저장합니다.

이제 페이지를 테스트할 수 있습니다.

페이지를 테스트하려면

  • Ctrl+F5를 눌러 페이지를 실행합니다.

    리소스 편집기에서 제공한 텍스트가 Button1의 레이블로 표시됩니다. 암시적 지역화를 사용할 때는 리소스 파일의 구문 속성이 페이지 자체에서 지정한 속성을 재정의합니다.

다른 culture 추가

각 언어와 culture 조합에 고유한 리소스 파일이 필요합니다. 다른 culture를 추가하려면 기본 파일을 시작점으로 사용할 수 있습니다. ISO 언어 코드가 파일 이름에 포함된 새 리소스 파일(예: en-us, fr-ca 및 en-gb)을 만들어 다른 culture와 로캘의 리소스 파일을 만들 수 있습니다. 이러한 ISO 코드는 Sample.aspx.en-us.res와 같이 페이지 이름과 .resx 파일 이름 확장명 사이에 배치됩니다. culture에 중립적인 언어를 지정하려면 국가 코드를 제거합니다. 예를 들어, 프랑스어 언어의 경우 Sample.aspx.fr.resx를 지정합니다.

참고:

암시적 지역화 구문을 사용할 때는 각 페이지에 대해 별도의 리소스 파일을 만들어야 합니다.

culture에 중립적인 프랑스어 언어 파일을 만들려면

  1. 솔루션 탐색기에서 Sample.aspx.resx 파일을 마우스 오른쪽 단추로 클릭한 다음 복사를 클릭합니다.

  2. App_LocalResources폴더를 마우스 오른쪽 단추로 클릭한 다음 붙여넣기를 클릭합니다.

    Visual Web Developer에서 사본 - Sample.aspx.resx라는 파일을 만듭니다.

  3. 사본 - Sample.aspx.resx 파일을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 클릭한 다음 Sample.aspx.fr.resx를 입력합니다.

    Sample.aspx.fr.resx는 culture에 중립적인 프랑스어 언어 텍스트 파일을 나타냅니다.

  4. Sample.aspx.fr.resx를 엽니다.

  5. Button, Label 및 TextBox 컨트롤의 Text를 각각 French Button, French Label 및 French TextBox로 설정합니다.

  6. 파일을 저장합니다.

대체 언어 설정을 사용하여 테스트

ASP.NET에서 새 리소스 파일을 사용하는지 확인하려면 먼저 원하는 culture를 요청하도록 브라우저 설정을 변경해야 합니다.

브라우저의 언어 설정을 변경하려면

  1. Microsoft Internet Explorer의 도구 메뉴에서 인터넷 옵션을 클릭합니다.

  2. 언어를 클릭합니다.

  3. 언어 기본 설정 대화 상자에서 추가를 클릭합니다.

  4. 언어 추가 대화 상자의 언어 아래에서 프랑스어(프랑스) [fr]를 클릭한 다음 확인을 클릭합니다.

  5. 추가를 클릭하고 언어 목록에 스페인어(멕시코) [es-mx]를 추가합니다.

  6. 추가를 클릭하고 언어 목록에 아랍어(이집트) [ar-eg]를 추가합니다.

    스페인어와 아랍어는 이 연습의 뒷부분에서 테스트에 사용합니다.

  7. 언어 기본 설정 대화 상자의 언어에서 프랑스어(프랑스) [fr]를 클릭하고 위로 이동을 클릭한 다음 확인을 클릭합니다.

이제 Internet Explorer에서 모든 요청의 언어 설정으로 fr을 전달하도록 설정되었습니다. Sample.aspx 페이지에서 culture가 auto로 설정되어 있으면 ASP.NET은 리소스 파일과 해당 값을 찾아 언어 및 culture 기본 설정에 따라 페이지를 구성합니다.

페이지를 테스트하려면

  • Visual Web Developer에서 Ctrl+F5를 눌러 페이지를 실행합니다.

    영어 버전 대신 지역화된 프랑스어 언어 파일의 값을 사용하여 페이지가 새로 고쳐집니다.

    참고:

    언어 기본 설정 대화 상자로 돌아가 목록에서 선택한 언어를 다시 위로 이동하면 Internet Explorer의 언어 설정을 다시 지정할 수 있습니다.

ASP.NET을 사용하여 명시적 지역화

이 연습의 첫 단계에서는 ASP.NET 암시적 지역화를 사용하여 컨트롤에 지역화된 텍스트를 표시했습니다. 속성 값이 포함된 리소스 파일을 생성하고 리소스 파일에서 속성 값(있는 경우)을 채우도록 지정하는 특성을 각 컨트롤에 추가했습니다. 리소스 파일에서 정보를 읽는 방법을 속성별로 지정할 필요가 없다는 점에서 암시적 지역화는 자동으로 실행됩니다.

그러나 속성 설정 방법을 보다 직접적으로 제어하려는 경우도 있습니다. 이렇게 하려면 암시적 지역화 대신 명시적 지역화를 사용할 수 있습니다. 명시적 지역화를 사용할 때는 리소스 파일을 가리키는 식을 사용하여 속성 값을 설정합니다. 페이지를 실행할 때 식이 평가되고 지정한 리소스 파일에서 값을 읽은 다음 이 값을 사용하여 속성을 설정합니다.

명시적 지역화는 컨트롤과 레이블 외에 많은 텍스트 또는 사용자 지정 메시지 본문을 지역화하려는 경우에 유용합니다. 예를 들어, 전자 상거래 사이트를 위해 지역화된 환영 및 감사 메시지를 개발한 다음 명시적 선언 식을 사용하여 이 텍스트를 페이지에 배치할 수 있습니다. 또한 명시적 지역화를 사용하면 각 페이지에 대해 별도의 파일 집합을 유지 관리하는 대신 하나의 지역화된 리소스 파일 집합을 유지 관리할 수 있습니다.

이 단원에서는 수동으로 리소스 파일을 만들고 ASP.NET 선언적 식 구문을 사용하여 참조합니다. 간단한 감사 메시지를 위한 리소스 파일을 만듭니다. 디자이너를 사용할 때와 달리 각 ASP.NET 페이지에 대해 별도의 리소스 파일을 만들 필요는 없습니다.

리소스 파일의 기본 이름은 LocalizedText입니다. 지역화할 각 언어에 대해 해당 언어 코드(및 선택적으로 culture 코드)가 파일 이름에 포함된 다른 파일을 만듭니다. 예를 들어, 미국 영어의 경우 LocalizedText.resx라는 파일을 만들고 캐나다 프랑스어의 경우 LocalizedText.fr-ca.resx라는 파일을 만듭니다. 두 파일은 모두 웹 응용 프로그램의 Resources 디렉터리에 배치됩니다. 이전의 암시적 예제와 달리 각 .aspx 페이지의 리소스 파일을 유지 관리할 필요가 없습니다. 대신 지원하는 각 언어 또는 culture에 대해 하나의 파일 집합을 유지 관리할 수 있습니다.

리소스 파일을 만들려면

  1. 솔루션 탐색기에서 웹 사이트의 루트를 마우스 오른쪽 단추로 클릭하고 ASP.NET 폴더 추가를 클릭한 다음 App_GlobalResources를 클릭합니다.

  2. App_GlobalResources 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

  3. Visual Studio에 설치되어 있는 템플릿에서 리소스 파일을 클릭합니다.

  4. 이름 상자에 LocalizedText.resx를 입력한 다음 추가를 클릭합니다.

    LocalizedText.resx 파일은 대체(fallback) culture의 리소스 파일로 사용됩니다.

  5. 두 번째 .resx 파일을 만들고 이름을 LocalizedText.fr.resx로 지정합니다.

    문자열 "fr"은 culture에 관계없이 브라우저의 언어가 프랑스어로 설정된 경우 사용할 리소스로 이 파일을 식별합니다.

  6. 세 번째 .resx 파일을 만들고 이름을 LocalizedText.es-mx.resx로 지정합니다.

    문자열 "es-mx"는 브라우저의 언어가 스페인어(멕시코)로 설정된 경우 사용할 리소스로 이 파일을 식별합니다.

  7. LocalizedText.resx 파일을 엽니다.

  8. 이름 열의 첫 번째 행에 Msg1을 입력합니다.

  9. 값 열의 첫 번째 행에 안녕하세요, 님를 입력합니다.

  10. 파일을 저장한 다음 닫습니다.

  11. LocalizedText.fr.resx를 열고 Msg1이라는 리소스 문자열을 만든 다음 값 Bon jour를 할당합니다. 작업이 끝나면 파일을 저장한 다음 닫습니다.

  12. LocalizedText.es-mx.resx를 열고 Msg1이라는 리소스 문자열을 만든 다음 값 Buenos días를 할당합니다. 작업이 끝나면 파일을 저장한 다음 닫습니다.

    참고:

    예음이 있는 문자(í)를 삽입하려면 Number Lock이 켜져 있는 상태로 숫자 키패드에서 Alt+0237을 입력합니다.

    Msg1이라는 리소스에 대해 3개 값을 만들었습니다. ASP.NET은 브라우저에 설정된 언어를 기반으로 해당 리소스 파일의 값을 읽습니다.

이제 리소스 파일을 만들었으므로 페이지로 돌아가서 해당 리소스를 참조하는 컨트롤을 추가할 수 있습니다.

페이지에 Label 컨트롤을 추가하려면

  1. Sample.aspx로 전환한 다음 디자인 뷰로 전환합니다.

  2. 다른 Label 컨트롤을 페이지로 끌어 옵니다.

  3. Label 컨트롤을 마우스 오른쪽 단추로 클릭하고 속성을 클릭한 다음 Expressions 상자에서 줄임표(…) 단추를 클릭합니다.

    식 대화 상자가 나타납니다.

  4. 바인딩 가능한 속성 목록에서 Text를 클릭합니다.

  5. 식 형식 목록에서 Resources를 선택합니다.

  6. 식 속성에서 ClassKey를 LocalizedText로, ResourceKey를 Msg1로 설정합니다.

  7. 확인을 클릭합니다.

  8. 소스 뷰로 전환합니다.

    이제 레이블의 텍스트 특성에 선택할 리소스와 키를 검색할 기본 파일을 나타내는 명시적 식이 있습니다.

    <asp:Label ID="Label2" Runat="server" Text="<%$ Resources:LocalizedText, Msg1 %>">
    
    참고:

    LocalizedText 특성은 실제 파일 이름이 아니기 때문에 언어 표시기, culture 표시기 또는 .resx 확장명이 없습니다. 대신 LocalizedText는 기본 리소스 클래스를 나타냅니다. 브라우저에서 전송한 culture에 따라 ASP.NET은 파일 이름에 해당 언어 또는 culture 코드가 포함된 파일(예: LocalizedText.fr.resx, LocalizedText.es-mx.resx 또는 일치하는 언어가 없는 경우 LocalizedText.resx)에서 자원을 선택합니다.

리소스 파일을 완성하고 선언적 식을 추가했으면 페이지를 테스트할 수 있습니다. 마지막 테스트 후 브라우저가 프랑스어를 언어 기본 설정으로 보고하도록 설정되었습니다. 테스트 중에 브라우저의 언어를 여러 번 변경할 것입니다.

페이지를 테스트하려면

  1. Ctrl+F5를 눌러 페이지를 실행합니다.

    리소스 편집기에서 제공한 텍스트의 프랑스어 언어 버전이 Label 컨트롤의 텍스트로 표시됩니다.

  2. Microsoft Internet Explorer의 도구 메뉴에서 인터넷 옵션을 클릭합니다.

  3. 언어를 클릭합니다.

  4. 언어 기본 설정 대화 상자에서 스페인어(멕시코) [es-mx]를 언어 목록의 맨 위로 이동합니다. 작업이 끝나면 확인을 클릭하여 인터넷 옵션 대화 상자를 닫습니다.

  5. F5 키를 눌러 브라우저를 새로 고칩니다.

    텍스트의 스페인어 버전이 표시됩니다.

  6. 언어를 아랍어로 변경한 다음 F5 키를 눌러 다시 페이지를 새로 고칩니다.

    이번에는 텍스트가 대체(fallback) 리소스 파일에서 사용한 언어로 표시됩니다. LocalizedText.ar-eg.resx 파일을 만들지 않았으므로 ASP.NET은 브라우저에서 보고하는 언어 및 culture와 일치하는 텍스트를 찾을 수 없어 대체(fallback) 리소스 파일을 사용했습니다.

  7. 페이지 테스트가 끝나면 언어를 다시 기본 언어로 설정합니다.

다음 단계

지역화는 복잡한 작업이 될 수 있습니다. 이 연습에서는 일부 작업을 덜어줄 수 있는 Visual Web Developer의 몇 가지 기능에 대해 설명했습니다. 지역화 및 ASP.NET에 대해 다음과 같은 경우자세히 알아볼 수도 있습니다. 예를 들어, 다음과 같은 경우입니다.

참고 항목

개념

CultureInfo 클래스 사용

기타 리소스

인코딩 및 지역화

Visual Studio의 전역화 및 지역화 네임스페이스