본문 바로가기
IT-개발,DB

[asp.net] ASP.NET 2.0 웹 페이지 전역화를 위한 Culture 및 UI Culture 설정

by SB리치퍼슨 2010. 10. 27.

ASP.NET 웹 페이지에서는 CultureUICulture 속성에 대한 두 가지 culture 값을 설정할 수 있습니다. Culture 값은 날짜, 숫자, 통화 서식 등 culture에 종속된 함수의 결과를 결정합니다. UICulture 값은 페이지에 로드되는 리소스를 결정합니다.

 

참고

CultureUICulture 속성은 언어(예: 영어의 경우 en, 스페인어의 경우 es, 독일어의 경우 de)와 culture(예: 미국의 경우 US, 영국의 경우 GB, 멕시코의 경우 MX, 독일의 경우 DE)를 식별하는 인터넷 표준 문자열을 사용하여 설정됩니다. 예를 들면 영어(미국)를 en-US로, 영어(영국)를 en-GB로, 스페인어(멕시코)를 es-MX로 설정할 수 있습니다. 자세한 내용은 CultureInfo를 참조하십시오.

두 culture 설정에 동일한 값을 설정할 필요는 없습니다. 응용 프로그램에 따라 두 값을 서로 다르게 설정해야 할 수도 있습니다. 그러한 예 중 하나는 웹 경매 사이트입니다. UICulture 속성은 각 웹 브라우저에 따라 변경될 수 있지만 Culture는 그대로 유지됩니다. 따라서 가격은 항상 동일한 통화와 서식으로 표시됩니다.

Culture 값은 en-US 또는 en-GB처럼 특정 culture로만 설정할 수 있습니다. 이렇게 하면 en-USen-GB처럼 통화 기호가 서로 다른 경우 en에 사용할 올바른 통화 기호를 식별할 필요가 없습니다.

사용자는 브라우저에서 UI culture와 culture를 설정할 수 있습니다. 예를 들어 Microsoft Internet Explorer를 사용하는 경우에는 도구 메뉴에서 인터넷 옵션을 클릭하고 일반 탭에서 언어를 클릭한 다음 기본 언어를 설정할 수 있습니다. Web.config 파일에서 globalization 요소의 enableClientBasedCulture 특성이 true로 설정되어 있는 경우 ASP.NET에서는 브라우저가 보낸 값을 기준으로 웹 페이지의 UI culture와 culture를 자동으로 설정할 수 있습니다.

페이지의 UI culture를 결정할 때 브라우저 설정에만 의존하는 것은 좋지 않습니다. 사용자는 자신의 기본 설정과 다른 옵션으로 설정된 브라우저를 사용하는 경우가 많습니다(예: 인터넷 카페의 경우). 이런 경우에는 사용자가 페이지에 대한 언어 또는 언어와 culture(CultureInfo 이름)를 명시적으로 선택할 수 있는 방법을 제공해야 합니다.

ASP.NET 웹 페이지에 대한 culture 및 UI culture를 선언적으로 설정하려면

  • 모든 페이지에 대한 UI culture 및 culture를 설정하려면 다음 예제와 같이 Web.config 파일에 globalization 섹션을 추가한 다음 uicultureculture 특성을 설정합니다.

    <globalization uiculture="es" culture="es-MX" />
  • 개별 페이지에 대한 UI culture 및 culture를 설정하려면 다음 예제와 같이 @ Page 지시문의 CultureUICulture 특성을 설정합니다.

    <%@ Page UICulture="es" Culture="es-MX" %>
  • ASP.NET에서 UI culture 및 culture를 현재 브라우저 설정에 지정된 첫 번째 언어로 설정하게 하려면 UICultureCultureauto로 설정합니다. 또는 이 값을 auto:culture_info_name으로 설정할 수도 있습니다. 여기서 culture_info_name은 culture 이름입니다. culture 이름 목록을 보려면 CultureInfo를 참조하십시오. 이 값은 @ Page 지시문 또는 Web.config 파일에서 설정할 수 있습니다.

ASP.NET 웹 페이지에 대한 culture 및 UI culture를 프로그래밍 방식으로 설정하려면

  1. 페이지의 InitializeCulture 메서드를 재정의합니다.

  2. 재정의된 메서드에서 페이지에 설정할 언어와 culture를 결정합니다.

    참고

    InitializeCulture 메서드는 페이지 수명 주기에서 페이지에 대해 속성이 설정되거나 컨트롤이 만들어지기 전에 초기 단계에 호출됩니다. 따라서 컨트롤에서 페이지에 전달되는 값을 읽으려면 Form 컬렉션을 사용하여 요청으로부터 직접 값을 가져와야 합니다.

다음 방법 중 하나를 사용하여 UI culture 및 culture를 설정합니다.

  • 페이지의 CultureUICulture 속성을 언어와 culture 문자열(예: en-US)로 설정합니다. 이러한 속성은 페이지 내부용이므로 페이지에서만 사용될 수 있습니다.

  • 현재 스레드의 CurrentUICultureCurrentCulture 속성을 각각 UI culture와 culture로 설정합니다. CurrentUICulture 속성은 언어와 culture 정보 문자열을 사용합니다. CurrentCulture 속성을 설정하려면 CultureInfo 클래스의 인스턴스를 만든 다음 CreateSpecificCulture 메서드를 호출합니다.

다음 코드 예제에서는 사용자가 드롭다운 목록에서 기본 설정 언어를 선택할 수 있는 ASP.NET 웹 페이지를 보여 줍니다. 이 페이지는 스레딩 및 전역화 클래스 작업을 좀 더 편리하게 할 수 있도록 두 개의 네임스페이스를 가져옵니다.

Visual Basic
<%@ Page Language="VB" uiculture="auto" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
  1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">
    Protected Overrides Sub InitializeCulture()
        If Request.Form("ListBox1") IsNot Nothing Then
            Dim selectedLanguage As String = _
                Request.Form("ListBox1")
            UICulture = Request.Form("ListBox1")
            Culture = Request.Form("ListBox1")
            Thread.CurrentThread.CurrentCulture = _
                CultureInfo.CreateSpecificCulture(selectedLanguage)
            Thread.CurrentThread.CurrentUICulture = New _
                CultureInfo(selectedLanguage)
        End If
        MyBase.InitializeCulture()
    End Sub
</script>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListBox ID="ListBox1" runat="server">
            <asp:ListItem Value="en-US" 
                Selected="True">English</asp:ListItem>
            <asp:ListItem Value="es-MX">Español</asp:ListItem>
            <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
        </asp:ListBox><br />
        <asp:Button ID="Button1" runat="server" 
            Text="Set Language" 
            meta:resourcekey="Button1" />
        <br />
        <asp:Label ID="Label1" runat="server" 
            Text="" 
            meta:resourcekey="Label1" />
        </div>
    </form>
</body>
</html>
====================================

C#
<%@ Page Language="C#" uiculture="auto" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>
<script runat="server">
protected override void InitializeCulture()
{
    if (Request.Form["ListBox1"] != null)
    {
        String selectedLanguage = Request.Form["ListBox1"];
        UICulture = selectedLanguage ;
        Culture = selectedLanguage ;

        Thread.CurrentThread.CurrentCulture = 
            CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new 
            CultureInfo(selectedLanguage);
    }
    base.InitializeCulture();
}
</script>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListBox ID="ListBox1" runat="server">
            <asp:ListItem Value="en-US" 
                Selected="True">English</asp:ListItem>
            <asp:ListItem Value="es-MX">Español</asp:ListItem>
            <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
        </asp:ListBox><br />
        <asp:Button ID="Button1" runat="server" 
            Text="Set Language" 
            meta:resourcekey="Button1" />
        <br />
        <asp:Label ID="Label1" runat="server" 
            Text="" 
            meta:resourcekey="Label1" />
        </div>
    </form>
</body>
</html>
반응형

댓글