ASP.NET 강좌와Tip 게시판입니다. - 시삽보기

제목: ASP.NET에서 MasterPage와 Localization 개발
글쓴이: 이광수
평점: 없음
조회: 1657

  

머리말


MasterPage 사용하여 ASP.NET 어플리케이션에서 지역화(localization) 구현하는 방법을 인터넷에서 찾아보는 동안 깨달은 바는, 많은 사람들이 동일한 문제를 해결하고자 한다는 사실이다. 안타깝게도, 문제에 적합한 해결방안을 찾지 못해서 의도한 바를 직접 구현했다.

 

배경


해결방안은 닷넷 프레임워크의 표준 지역화 메커니즘을 사용하였다.

 

코드 사용


출시된 솔루션은 현재 선택된 culture 위한 저장소로 Session 오브젝트를 사용했다. 오브젝트는 global.asax 파일의 부분인 Session_Start메서드 동안 초기화된다.

 

만약 문명 변경이 사용자에 의해 요청된다면, MasterPage Session 오브젝트에서 저장된 culture 변경한다.

 

Page에서 상속 받는 BasePage 안에서 메서드 InitializeCulture 재정의되고 session 오브젝트에 저장된 적당한 culture 정보를 현재 스레드로 설정한다. 그래서, 모든 폼은 BasePage에서 파생되어야 필요가 있다.

 

Global.asax 파일에서부터 시작해보자.

 

void Session_Start(object sender, EventArgs e)

{

    //set english as default startup language

    Session["MyCulture"] = "en-GB";

}


아니면, culture key <globalization culture="en-GB" /> Web.config 파일에 정의할 수도 있으며, 후에는 처리되고 Session_Start메서드에서 Session오브젝트안에 저장된다.

다음 단계는 마스터 페이지이다.

 

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>[Udev - Masterpage with Localization Support]</title>

</head>

 

<body>

    <form id="theForm" runat="server">

    <div>

        <asp:contentplaceholder id="ContentPlaceHolder" runat="server">

        </asp:contentplaceholder>

    </div>

    <div style="margin-top:20px;">

        <asp:LinkButton ID="btnSetGerman" runat="server" Text="Deutsch" CommandArgument="de-CH" OnClick="RequestLanguageChange_Click"></asp:LinkButton>&nbsp;&nbsp;

        <asp:LinkButton ID="btnSetEnglish" runat="server" Text="English" CommandArgument="en-GB" OnClick="RequestLanguageChange_Click"></asp:LinkButton>

    </div>

    </form>

</body>

</html>


아래 culture 변경시키는 부분은 MasterPage 직접  혹은 삽입된(embedded) UserControl안에 위치시킬 수도 있다. 요청된 언어로 결정하기 위해서는, ttribute of the LinkButton CommandArgument특성이 사용된다.

 


그리고 다음은 마스터 페이지의 코드 비하인드이다.

 

public partial class MasterPage : System.Web.UI.MasterPage

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

 

    protected void RequestLanguageChange_Click(object sender, EventArgs e)

    {

        LinkButton senderLink = sender as LinkButton;

 

        //store requested language as new culture in the session

        Session["MyCulture"] = senderLink.CommandArgument;

 

        //reload last requested page with new culture

        Server.Transfer(Request.Path);

    }

}


CommandArgument안에 전달된 요청된 언어는 처리되고 Session 오브젝트에 저장된다. 후로는, 초기에 요청된 페이지는 서버 측에서 리로드된다.

 


BasePage 대한 중요한 말이 아직 남았다.

 

/// <summary>

/// Custom base page used for all web forms.

/// </summary>

public class BasePage : Page

{

    protected override void InitializeCulture()

    {

        //retrieve culture information from session

        string culture = Convert.ToString(Session["MyCulture"]);

 

        //check whether a culture is stored in the session

        if (culture.Length > 0) Culture = culture;

 

        //set culture to current thread

        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);

        Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

 

        //call base class

        base.InitializeCulture();

    }

}


위에서 언급했듯이, InitializeCulture 메소드는 재정의되고 Session 오브젝트에서 저장된 culture 가져오고 현재 실행중인 스레드를 여기에 할당한다.

 

유의: 아티클에서는 오직 culture 언급되었지만, UI culture 마찬가지이다. 핸들링은 절대적으로 똑같고 , 아티클에서 다룰 사항은 아니다. 자세한 정보는 MSDN 페이지를 참조하도록 한다. :)

실행되는 예제는 압축파일을 다운로드 받도록 한다.

 

 

출처 : http://www.codeproject.com/useritems/MasterPage_Localization.asp

 

 

이 글은 날개달기에 의해 번역되었습니다.

작성자 정보

글등록 +12 408
덧글등록 +3 17
이름: 이광수(magicbullet )

Level 19
 [EXP.9/70 ]


메일: webwings골뱅이gmail.com

홈페이지: www.paewang.net
자기소개
글 공유하기 |
 tweet facebook
2007-05-14 오전 1:26:19
IP: 121.136.145.3
        
트랙백 주소 : http://www.hoons.kr/6434/BoardTrackback.aspx ()
등록된 트랙백 0

나도한마디
사용자
글등록 +12408  덧글등록 +117
이광수            [2007-05-14]
Level 19
 [EXP.9/70]
아래 작성한 글이 수정,삭제, 굴비달기가 전혀 안되서 다시 올렸습니다. ^^;
태그로 엮인글 리스트


사용자 정보

close