Share via


ASP.NET 웹 페이지 리소스 개요

업데이트: 2007년 11월

다른 언어를 사용하는 사람이 읽을 웹 페이지를 만드는 경우 해당 언어를 사용하여 페이지를 볼 수 있는 방법을 제공해야 합니다. 각 언어로 페이지를 다시 만드는 것도 하나의 방법이 될 수 있습니다. 그러나 이 방법은 작업량이 많고 오류가 발생하기 쉬우며 원래 페이지를 변경할 때 유지 관리하기가 어렵습니다.

ASP.NET에서는 브라우저의 기본 언어 설정 또는 사용자가 명시적으로 선택한 언어를 기반으로 콘텐츠 및 다른 데이터를 가져올 수 있는 페이지를 만들 수 있습니다. 콘텐츠 및 다른 데이터를 리소스라고 하며 이러한 데이터를 리소스 파일 또는 다른 소스에 저장할 수 있습니다.

ASP.NET 웹 페이지에서는 리소스에서 속성 값을 가져오도록 컨트롤을 구성합니다. 런타임에 리소스 식은 해당하는 리소스 파일의 리소스로 대체됩니다.

리소스 파일

리소스 파일은 다른 언어 또는 이미지 경로로 변환할 문자열이 포함된 XML 파일입니다. 리소스 파일에는 키/값 쌍이 포함되어 있습니다. 각 쌍은 개별 리소스입니다. 키 이름은 대/소문자를 구분하지 않습니다. 예를 들어 리소스 파일에는 Button1 키와 Submit 값을 사용하는 리소스가 포함될 수 있습니다.

각 언어(예: 영어, 프랑스어) 또는 언어와 문화권(예: 영어[영국], 영어[미국])에 대해 별도의 리소스 파일을 만듭니다. 지역화된 각 리소스 파일에는 동일한 키/값 쌍이 포함되어 있으며 지역화된 리소스 파일은 기본 리소스 파일보다 리소스가 적게 포함될 수 있다는 점만 다릅니다. 그런 다음 기본 제공 언어 대체(fallback) 프로세스를 통해 기본 리소스 또는 중립 리소스의 로드를 처리합니다.

ASP.NET의 리소스 파일은 .resx 확장명을 사용합니다. 런타임에 .resx 파일은 어셈블리(위성 어셈블리라고도 함)로 컴파일됩니다. .resx 파일은 ASP.NET 웹 페이지와 마찬가지로 동적으로 컴파일되므로 리소스 어셈블리를 만들 필요가 없습니다. 컴파일하면 여러 개의 비슷한 언어 리소스 파일이 단일 어셈블리로 압축됩니다.

리소스 파일을 만드는 경우 먼저 기본 .resx 파일을 만듭니다. 지원할 각 언어에 대해 파일 이름을 같지만 언어 또는 언어와 문화권(문화권 이름)이 이름에 포함된 새 파일을 만듭니다. 문화권 이름 목록을 보려면 CultureInfo 클래스를 참조하십시오. 예를 들어 다음과 같은 파일을 만들 수 있습니다.

  • WebResources.resx

    기본 리소스 파일입니다. 이 파일은 기본(대체) 리소스 파일입니다.

  • WebResources.es.resx

    스페인어 리소스 파일입니다.

  • WebResources.es-mx.resx

    스페인어(멕시코) 리소스 파일입니다.

  • WebResources.de.resx   

    독일어 리소스 파일입니다.

런타임에 ASP.NET에서는 CurrentUICulture 속성의 설정과 가장 많이 일치하는 리소스 파일을 사용합니다. 스레드의 UI 문화권은 페이지의 UI 문화권에 따라 설정됩니다. 예를 들어 현재 UI 문화권이 스페인어인 경우 ASP.NET에서는 컴파일된 버전의 WebResources.es.resx 파일을 사용합니다. 현재 UI 문화권과 일치하는 리소스 파일이 없는 경우 ASP.NET에서는 리소스 대체(fallback)를 사용합니다. 즉, 먼저 특정 문화권에 대한 리소스를 검색한 다음 해당 리소스가 없는 경우 중립 문화권에 대한 리소스를 검색합니다. 이러한 리소스도 없는 경우 ASP.NET에서는 기본 리소스 파일을 로드합니다. 이 예제의 기본 리소스 파일은 WebResource.resx입니다.

ASP.NET 웹 사이트의 리소스 파일 만들기

ASP.NET에서는 범위가 다른 리소스 파일을 만들 수 있습니다. 웹 사이트의 모든 페이지 또는 코드에서 리소스 파일을 읽을 수 있도록 전역 리소스 파일을 만들 수 있습니다. 또한 단일 ASP.NET 웹 페이지(.aspx 파일)에 대한 리소스를 저장하는 로컬 리소스 파일도 만들 수 있습니다.

전역 리소스 파일

전역 리소스 파일을 만들려면 응용 프로그램의 루트에서 예약된 App_GlobalResources 폴더에 파일을 배치하면 됩니다. App_GlobalResources 폴더에 있는 모든 .resx 파일에는 전역 범위가 사용됩니다. 또한 ASP.NET에서는 강력한 형식의 개체를 생성하고 개발자는 이를 통해 전역 리소스에 프로그래밍 방식으로 쉽게 액세스할 수 있습니다.

로컬 리소스 파일

로컬 리소스 파일은 단일 ASP.NET 페이지 또는 사용자 정의 컨트롤(파일 이름 확장명이 .aspx, .ascx 또는 .master인 ASP.NET 파일)에만 적용되는 파일입니다. 예약된 이름 App_LocalResources를 사용하는 폴더에 로컬 리소스 파일을 배치합니다. App_LocalResources 폴더는 루트 App_GlobalResources 폴더와 달리 응용 프로그램의 모든 폴더에 있을 수 있습니다. 리소스 파일의 이름을 사용하여 리소스 파일 집합을 특정 웹 페이지와 연결합니다.

예를 들어 App_LocalResources 폴더에 Default.aspx라는 페이지가 있는 경우 다음과 같은 파일을 만들 수 있습니다.

  • Default.aspx.resx. 일치하는 언어가 없을 경우 대체(fallback) 리소스 파일로 사용되는 기본 로컬 리소스 파일입니다.

  • Default.aspx.es.resx. 스페인어 리소스 파일입니다(문화권 정보 없음).

  • Default.aspx.es-mx.resx. 스페인어(멕시코) 리소스 파일입니다.

  • Default.aspx.fr.resx. 프랑스어 리소스 파일입니다(문화권 정보 없음).

기본 파일 이름은 페이지 파일 이름, 언어 및 문화권 이름이 순서대로 나오고 .resx 확장명으로 끝납니다. 문화권 이름 목록을 보려면 CultureInfo를 참조하십시오.

클라이언트 스크립트 리소스 지역화

ASP.NET AJAX 클라이언트 스크립트에 대한 지역화 지원은 ASP.NET 2.0 지역화 모델을 기반으로 빌드됩니다. 이 모델에서는 스크립트 파일과 지역화된 스크립트 리소스를 허브 및 스포크 구성의 어셈블리(위성 어셈블리)에 포함합니다. 그러면 이러한 포함된 클라이언트 스크립트와 리소스를 특정 언어 및 지역에 대해 선택적으로 사용할 수 있습니다. 이 모델을 사용하면 단일 코드베이스로 여러 문화권을 지원할 수 있습니다. 또한 디스크에 .js 파일로 제공된 지역화된 스크립트 파일도 지원합니다. ASP.NET은 특정 언어 및 지역에 대해 지역화된 클라이언트 스크립트 및 리소스를 자동으로 처리합니다.

자세한 내용은 다음 항목을 참조하십시오.

전역 리소스 파일과 로컬 리소스 파일 간의 선택

웹 응용 프로그램에서 전역 리소스 파일과 로컬 리소스 파일을 조합하여 사용할 수 있습니다. 일반적으로 페이지 간에 리소스를 공유하려는 경우 전역 리소스 파일에 리소스를 추가합니다. 또한 전역 리소스 파일의 리소스는 프로그래밍 방식으로 파일에 액세스하려는 경우를 위해 강력하게 형식화됩니다.

그러나 지역화된 모든 리소스를 전역 리소스 파일에 저장하면 리소스 파일이 커질 수 있습니다. 또한 두 명 이상의 개발자가 같은 리소스 파일의 다른 페이지로 작업 중인 경우에는 전역 리소스 파일을 관리하기가 어려울 수 있습니다.

로컬 리소스 파일을 사용하면 단일 ASP.NET 웹 페이지에 대한 리소스를 쉽게 관리할 수 있습니다. 그러나 페이지 간에 리소스를 공유할 수 없습니다. 또한 여러 언어로 지역화해야 하는 페이지가 많은 경우 로컬 리소스 파일을 많이 만들 수도 있습니다. 여러 폴더와 언어가 포함된 큰 사이트의 경우 로컬 리소스를 사용하면 응용 프로그램 도메인의 어셈블리 수를 신속하게 늘릴 수 있습니다.

기본 로컬 리소스 파일 또는 기본 전역 리소스 파일을 변경하면 ASP.NET에서 리소스를 다시 컴파일하고 ASP.NET 응용 프로그램을 다시 시작합니다. 이런 경우 사이트의 전반적인 성능에 영향을 줄 수 있습니다. 위성 리소스 파일을 추가하면 리소스가 다시 컴파일되지는 않지만 ASP.NET 응용 프로그램이 다시 시작됩니다.

참고:

링크된 리소스는 전역 리소스 파일에서만 지원됩니다.

웹 페이지에서 리소스 작업

리소스 파일을 만든 후에는 ASP.NET 웹 페이지에서 사용할 수 있습니다. 일반적으로 리소스를 사용하여 페이지에 있는 컨트롤의 속성 값을 채웁니다. 예를 들어 속성을 특정 문자열로 하드 코드하지 않고 리소스를 사용하여 Button 컨트롤의 Text 속성을 설정할 수 있습니다.

리소스를 사용하여 컨트롤 속성 값을 설정하려면 다음과 같이 암시적 지역화 또는 명시적 지역화를 사용할 수 있습니다.

  • 암시적 지역화는 로컬 리소스와 함께 사용되며 컨트롤 속성을 일치하는 리소스로 자동 설정할 수 있습니다.

  • 명시적 지역화에서는 리소스 식을 사용하여 컨트롤 속성을 로컬 또는 전역 리소스 파일의 특정 리소스로 설정할 수 있습니다.

로컬 리소스를 사용한 암시적 지역화

특정 페이지에 대한 로컬 리소스 파일을 만든 경우에는 암시적 지역화를 사용하여 리소스 파일로부터 컨트롤의 속성 값을 채울 수 있습니다. 암시적 지역화를 수행하는 경우 ASP.NET에서는 리소스 파일을 읽은 다음 리소스와 속성 값을 대응시킵니다.

암시적 지역화를 사용하려면 로컬 리소스 파일의 리소스에 대해 다음과 같은 패턴을 따르는 명명 규칙을 사용해야 합니다.

Key.Property

예를 들어 이름이 Button1인 Button 컨트롤에 대한 리소스를 만드는 경우 로컬 리소스 파일에 다음과 같은 키/값 쌍을 만들 수 있습니다.

Button1.Text
Button1.BackColor
Label1.Text

Key 이름은 원하는 대로 지정할 수 있지만 Property는 지역화하는 컨트롤 속성의 이름과 일치해야 합니다.

페이지에서 컨트롤 태그에 특수 meta 특성을 사용하여 암시적 지역화를 지정합니다. 지역화할 속성을 명시적으로 지정할 필요는 없습니다. 암시적 지역화를 위해 구성된 Button 컨트롤은 다음과 같습니다.

<asp:Button ID="Button1"  Text="DefaultText" 
    meta:resourcekey="Button1" />

resourcekey 값은 해당하는 리소스 파일의 키와 대응됩니다. 런타임에 ASP.NET에서는 컨트롤 레이블을 resourcekey로 사용하여 리소스와 컨트롤 속성을 대응시킵니다. 속성 값이 리소스 파일에 정의되어 있는 경우 ASP.NET에서는 속성에 대해 리소스 값을 사용합니다.

명시적 지역화

리소스 식을 사용하는 명시적 지역화를 사용할 수도 있습니다. 암시적 지역화와 달리 설정할 각 속성에 대해 리소스 식을 사용해야 합니다.

전역 리소스 파일로부터 Text 속성을 설정하도록 구성된 Button 컨트롤은 다음과 같습니다.

<asp:Button ID="Button1"  
    Text="<%$ Resources:WebResources, Button1Caption %>" />

리소스 식은 다음과 같은 형식을 사용합니다. 여기에서 Class는 리소스가 전역 리소스가 아니면 선택적 요소이고 ResourceID는 필수 요소입니다.

<%$Resources:Class,ResourceID%>

Class 값은 리소스가 전역 리소스인 경우 사용할 리소스 파일을 식별합니다. .resx 파일이 컴파일되면 확장명이 없는 기본 파일 이름이 결과 어셈블리의 클래스 이름으로 명시적으로 사용됩니다. ASP.NET에서는 페이지 클래스를 리소스 클래스와 대응시키므로 현재 페이지 이름과 일치하는 로컬 리소스 파일의 리소스를 사용하려는 경우 클래스 이름을 포함할 필요가 없습니다.

ResourceID 값은 읽을 리소스의 식별자입니다. 이전 예제의 경우 전역 리소스 파일인 WebResources.resx 또는 적절한 지역화 버전으로부터 단추의 Text 속성을 읽습니다. 이 파일에서 ASP.NET은 식별자가 Button1Caption인 리소스와 페이지 자체에 대한 값을 사용합니다. 페이지 속성을 설정하려면 @ Page 지시문에 리소스 식을 사용하면 됩니다.

컨트롤에 대해 명시적 리소스 식이나 암시적 리소스 식을 지정할 수 있지만 두 식을 모두 한꺼번에 지정할 수는 없습니다. Button 컨트롤에 대해 다음과 같은 선언 구문을 사용하면 구문 분석 오류가 발생합니다.

<asp:Button ID="Button1" 
             
            meta:resourcekey="Button1Resource1"
            Text="<%$ Resources:WebResources, Button1Caption %>" />

이 예제에서는 암시적 로컬 리소스 파일(현재 페이지 이름과 일치하는 파일)을 지정했을 뿐만 아니라 WebResources라는 명시적 리소스 파일도 지정했습니다. 이 컨트롤에 대한 구문 분석 오류를 해결하려면 리소스 식 중 하나를 제거해야 합니다.

정적 텍스트 지역화

페이지에 정적 텍스트가 포함되어 있는 경우 Localize 컨트롤에 텍스트를 포함한 다음 명시적 지역화를 사용하여 정적 텍스트를 설정하는 방식으로 ASP.NET 지역화를 사용할 수 있습니다. Localize 컨트롤은 태그를 렌더링하지 않습니다. 이 컨트롤은 지역화된 텍스트의 자리 표시자 역할만 합니다. Localize 컨트롤은 속성 표가 아니라 디자인 뷰에서 편집할 수 있습니다. 런타임에 ASP.NET에서는 Localize 컨트롤을 Literal 컨트롤로 처리합니다. 예를 들어 페이지에 다음과 같은 코드가 포함될 수 있습니다.

<h1>
  <asp:Localize runat=server 
    ID="WelcomeMessage" 
    Text="Welcome!" meta:resourcekey="LiteralResource1" />
</h1>
<br />
<br />
<asp:Localize 
    ID="NameCaption"
    Text="Name: " meta:resourcekey="LiteralResource2" />
<asp:TextBox  ID="TextBox1" 
    meta:resourcekey="TextBox1Resource1" />
보안 정보:

이 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다. 기본적으로 ASP.NET 페이지에서는 사용자 입력 내용에 스크립트나 HTML 요소가 포함되어 있지 않은지 유효성을 검사합니다. 자세한 내용은 스크립트 악용 개요를 참조하십시오.

템플릿의 암시적 지역화

DataList, GridViewWizard 컨트롤 같은 템플릿 컨트롤에서 부모 컨트롤의 암시적 리소스 식을 통해 속성에 액세스하는 방식으로 템플릿 스타일 속성을 지역화할 수 있습니다. 템플릿 자체에 대해서는 암시적 리소스 식을 사용할 수 없습니다.

템플릿 속성의 값을 지역화하려면 템플릿이 속한 컨트롤의 리소스 키와 meta 특성을 사용하고 리소스 파일에 Property.Subproperty 구문이나 Property-Subproperty 구문을 사용합니다. 예를 들어, 다음은 Wizard 컨트롤에 대한 선언 구문입니다.

<asp:Wizard ID="Wizard1" 
     
    meta:resourcekey="Wizard1Resource1">
  <NavigationStyle 
    BorderWidth="<%$ resources:navBorderWidth %>"/>
  <WizardSteps>
    <asp:WizardStep ID="WizardStep1" 
       
      Title="Step 1" 
      meta:resourcekey="WizardStep1Resource1">
    </asp:WizardStep>
  </WizardSteps>
</asp:Wizard>

앞의 예제에 대해 로컬 리소스 파일의 다음과 같은 키/값 쌍을 사용할 수 있습니다.

Wizard1Resource1.NavigationStyle.BackColor, Red
navborderWidth, 5

또는 다음과 같은 키/값 쌍을 사용할 수도 있습니다.

Wizard1Resource1.NavigationStyle-BackColor, Red
navborderWidth, 5

앞의 예제에서 Wizard 컨트롤의 NavigationStyle 속성에 대해 명시적 리소스 식을 사용할 수 있습니다. 명시적 리소스 식의 경우 로컬 리소스 파일의 리소스가 사용되므로 Class 이름을 생략할 수 있습니다.

템플릿 기반 서버 컨트롤에 대한 자세한 내용은 ASP.NET 웹 서버 컨트롤 템플릿을 참조하십시오.

다른 언어에 대한 리소스 파일 선택

페이지가 실행되면 ASP.NET에서는 페이지의 현재 UICulture 설정에 가장 근접한 리소스 파일의 버전을 선택하거나 리소스 대체(fallback)를 사용하여 리소스를 가져옵니다. 예를 들어 Default.aspx 페이지를 실행 중이고 현재 UICulture 속성이 es(스페인어)로 설정되어 있는 경우 ASP.NET에서는 로컬 리소스 파일 Default.aspx.es.resx의 컴파일된 버전을 사용합니다.

ASP.NET에서는 페이지의 UICultureCulture 속성을 브라우저에 의해 전달된 언어 및 문화권 값으로 설정할 수 있습니다. 선언적으로 또는 코드를 작성하여 UICultureCulture 속성을 명시적으로 설정할 수도 있습니다. 또한 Web.config 파일에서 선언적으로 값을 설정할 수 있습니다. 자세한 내용은 방법: ASP.NET 웹 페이지 전역화를 위한 Culture 및 UI Culture 설정을 참조하십시오.

참고:

다른 사용자의 컴퓨터에서 브라우저를 사용할 수도 있으므로 언어 및 문화권 정보를 설정할 때 브라우저 설정에만 의존하면 안 됩니다. 또한 브라우저는 대개 특정 문화권 설정 없이 언어 정보만 전달합니다. 이런 경우 서버는 데이터 서식을 지정하기 위해 특정 문화권을 추론해야 합니다. 이때 사용자가 언어를 명시적으로 선택할 수 있도록 하는 것이 좋습니다.

프로그래밍 방식으로 리소스 작업

리소스 식을 사용하여 태그에 리소스 값을 설정할 수 있을 뿐만 아니라 프로그래밍 방식으로 리소스 값을 검색할 수도 있습니다. 디자인 타임에 리소스 값을 알 수 없거나 리소스 값을 런타임에 가져오는 값으로 설정하려는 경우 이 방법을 사용할 수 있습니다. 자세한 내용은 방법: 프로그래밍 방식으로 리소스 값 검색을 참조하십시오.

참고 항목

기타 리소스

ASP.NET 전역화 및 지역화