ASP.NET 응용 프로그램의 리소스

업데이트: 2007년 11월

ASP.NET 응용 프로그램에 대한 위성 어셈블리를 만든 다음에는 공용 언어 런타임에서 해당 어셈블리를 찾아 사용할 수 있는 특정 위치에 어셈블리를 배치해야 합니다. ASP.NET 응용 프로그램과 ASP.NET 컨트롤에서 사용하는 위성 어셈블리의 디렉터리 구조는 Windows 기반 응용 프로그램에서 사용하는 위성 어셈블리의 디렉터리 구조와 다릅니다. ASP.NET 응용 프로그램은 어셈블리를 포함할 수 있습니다. 그러나 ASP.NET 페이지가 동적으로 어셈블리로 변환되므로 어셈블리 이름을 미리 알 수 없고 표준 위성 어셈블리 구성이 적용되지 않습니다. 이 단원에서는 ASP.NET 페이지 및 ASP.NET 컨트롤의 리소스를 사용하는 방법을 설명합니다.

참고:

ASP.NET 응용 프로그램에서 사용할 리소스를 만들고 컴파일하는 절차는 Windows 기반 응용 프로그램에서 사용할 리소스를 만드는 절차와 다르지 않습니다. 이 절차에 대한 자세한 내용은 리소스 파일 만들기, 리소스 패키징 및 배포위성 어셈블리 만들기를 참조하십시오.

ASP.NET 페이지의 리소스

ASP.NET 페이지의 리소스를 사용하려면 먼저 응용 프로그램의 리소스를 저장할 주 어셈블리를 만듭니다. 이 어셈블리에는 응용 프로그램의 기본 또는 중립 리소스가 포함됩니다. 그런 다음 응용 프로그램에서 지원하는 각 문화권에 대해 지역화된 리소스를 포함하는 위성 어셈블리를 만듭니다. 주 어셈블리를 응용 프로그램의 bin 디렉터리에 설치하고 위성 어셈블리를 예상 하위 디렉터리에 설치합니다.

참고:

이 모델을 사용하여 ASP.NET 응용 프로그램에 리소스를 배포하는 경우 모든 어셈블리는 잠금 문제 없이 전역 어셈블리 캐시에 섀도 복사됩니다.

ASP.NET 페이지에 사용되는 다음 예제에서는 해당 리소스를 검색하기 위해 ResourceManager를 만듭니다.

<%
    Dim a As Assembly = Assembly.Load("myApp")
    Dim rm As ResourceManager = New ResourceManager("myApp", a)
    Response.Write(rm.GetString("string"))
    %>
<%
    Assembly a = Assembly.Load("myApp");
    ResourceManager rm = new ResourceManager("myApp", a);
    Response.Write(rm.GetString("string"));
    %>

이전 예제의 코드 줄 뒤에 사용자가 지정하는 문화권을 사용하여 CultureInfo 개체를 만들고 CultureInfo 값을 사용하여 CurrentUICulture 속성.을 초기화하는 코드를 추가하면 .aspx 페이지에서 리소스를 검색하는 데 사용할 문화권을 명시적으로 지정할 수 있습니다. 다음 예제에서는 CurrentUICulture 속성이 독일어 부모 문화권 "de"로 설정되므로 항상 독일어 리소스만 검색합니다.

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de")
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

CurrentUICulture 속성을 초기화하는 데 사용될 수 있는 CultureInfo 개체를 만들기 위해 "de" 같은 중립 문화권을 지정할 수도 있지만 특정 문화권을 지정하여 CurrentCulture 속성을 초기화해야 합니다. CurrentCulture 속성은 오스트리아에서 사용하는 독일어를 나타내는 ("de-AT")와 같이 언어와 국가 모두와 관련된 특정 문화권을 필요로 합니다. 중립 문화권 "de"는 언어에만 관련된 문화권이므로 사용할 수 없습니다. CurrentCulture 속성에 필요한 형식으로 CultureInfo 개체를 만들려면 CultureInfo.CreateSpecificCulture 메서드를 사용합니다. 이 메서드는 지정된 중립 문화권과 관련된 특정 문화권을 나타내는 CultureInfo 개체를 만듭니다. 다음 예제에서는 CultureInfo.CreateSpecificCulture 메서드를 사용하여 중립 문화권 "de"와 관련된 특정 문화권을 나타내는 CultureInfo 개체를 만들고 이 개체를 사용하여 CurrentCulture 속성 값을 초기화합니다.

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

.aspx 페이지에서 CurrentUICulture 속성과 CurrentCulture 속성 둘 다의 값을 명시적으로 설정하는 것이 좋습니다. 다음 예제에서는 CurrentCulture를 "de"로 설정한 다음 CurrentCulture 값을 사용하여 CurrentUICulture 속성을 초기화합니다.

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

또한 CultureInfo.CreateSpecificCulture 메서드를 사용하면 웹 브라우저의 현재 언어를 사용하여 .aspx 페이지에서 CurrentCulture 속성을 초기화할 수 있습니다. 다음 예제에서 Request.UserLanguages 속성은 웹 브라우저의 현재 언어를 문자열로 반환합니다. CultureInfo.CreateSpecificCulture 메서드는 이 문자열을 구문 분석하고 CurrentCulture 속성의 값을 초기화하는 데 사용할 수 있는 형식으로 CultureInfo 개체를 반환합니다.

' Set the CurrentCulture property to the culture associated with the Web
' browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0])

' It is good practice to explicitly set the CurrentUICulture property.
' Initialize the CurrentUICulture property
' with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
// Set the CurrentCulture property to the culture associated with the Web
// browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

// It is good practice to explicitly set the CurrentUICulture property.
// Initialize the CurrentUICulture property
// with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

ASP.NET 응용 프로그램의 리소스를 사용하는 다른 예제를 보려면 방법: 프로그래밍 방식으로 리소스 값 검색 자습서 및 ASP.NET 퀵 스타트의 ASP.NET 응용 프로그램 지역화 샘플과 리소스 파일 작업 샘플을 참조하십시오.

ASP.NET 컨트롤의 리소스

ASP.NET 컨트롤을 사용하여 ASP.NET 응용 프로그램을 개발하는 경우 앞에서 설명한 것과 동일한 디렉터리 구조를 사용할 수 있습니다. 컨트롤을 만들 때, 사용자에게 여러 가지 정보 집합을 표시하기 위해 리소스를 사용하는 코드를 작성할 수 있습니다. 컨트롤은 컴파일되므로 어셈블리를 가집니다. 이렇게 되면 해당 어셈블리에 기본 리소스 집합을 포함할 수 있습니다. 컨트롤에서 사용할 리소스에 대한 위성 어셈블리를 만들어 위성 어셈블리에 필요한 디렉터리 구조에 배치합니다. 자세한 내용은 위성 어셈블리 만들기를 참조하십시오. 컨트롤과 컨트롤의 리소스를 응용 프로그램 루트의 bin 디렉터리에 둡니다. 다음 그림에서는 올바른 디렉터리 구조의 한 예를 보여 줍니다.

ASP.NET 컨트롤 디렉터리와 ASP.NET 응용 프로그램

주 ASP.NET 디렉터리, AppRoot로 설정

다음 그림에서 참조하는 myControl의 여러 인스턴스를 myPage.aspx에 배치할 수 있습니다. 각 버전마다 다른 리소스 파일 엔트리를 참조하도록 설정할 수 있습니다. 다음 ASP.NET 코드 예제에서 이를 보여 줍니다.

<Loc:myControl  Text="entry1" />
<Loc:myControl  Text="entry2" />

이 예제에서 ResourceManager는 응용 프로그램의 CultureInfo.CurrentUICulture 속성을 사용하여 검색할 리소스를 결정합니다.

다음은 Button 컨트롤에 대한 예제입니다. Text 변수는 검색된 다음 .aspx 페이지의 컨트롤에 설정되는 속성 값을 나타냅니다. 이 값은 검색할 엔트리의 이름을 확인하는 데 사용됩니다. 이 예제의 경우 사용자에게 결과를 표시하기 위해 사용되는 동일한 속성입니다.

Public Class myControl
Inherits Button

    Protected Overrides Sub Render(HtmlTextWriter writer)
        ' rm refers to the ResourceManager.
        Text = rm.GetString(Text)
        MyBase.Render(writer)
    End Sub
End Class
public class mycontrol : Button 
{
    protected override void Render(HtmlTextWriter writer) 
    {
        // rm refers to the ResourceManager.
        Text = rm.GetString(Text);      
        base.Render(writer);
    }
}

참고 항목

개념

응용 프로그램의 리소스

리소스 파일 만들기

리소스 패키징 및 배포

위성 어셈블리 만들기

참조

System.Globalization.CultureInfo

기타 리소스

ASP.NET 웹 사이트 만들기