* .Net 4.0 기준 *
닷넷에서 다국어구현은 편하게 되어 있습니다.
리소스파일만 연결해놓으면 필요할 때 언어를 지정하여 표시가 가능하기 때문입니다.
닷넷에서 몇 가지 예약 이름 폴더가 있는지 그중 하나가 리소스 폴더 들입니다.
이런 폴더들은 그냥 폴더 추가만 해서 같은 이름으로 만들면 같은 역할을 합니다.
하지만 그렇게 만들면 찜찜하죠잉? ㅎㅎ
해당 프로젝트에서 오른쪽 클릭 > 추가 > ASP>NET 폴더 추가 > App_GlobalResources 클릭
이렇게 하면 자동으로 App_GlobalResources 폴더가 생성됩니다.
이제 멀티랭귀지용으로 사용할 리소스를 만들겠습니다.
App_GlobalResources 폴더 오른쪽 클릭 > 추가 > 새 항목
여기로 들어가면 형식이 3가지가 보입니다.
여기서 '리소스 파일'을 선택하고 파일을 추가합니다.
이렇게 추가된 리소스파일은 디폴트 언어가 됩니다.
(언어 감지가 안 되거나 다른 리소스파일에 해당 언어의 내용이 없으면 이 파일에 있는 값을 기본값으로 사용하게 됨)
2에서 했던 방법으로 리소스파일을 하나 더 만듭니다.
이때 파일 이름은 처음 만든 리소스파일 이름에 점(.)을 찍고 언어-국가 코드 형식의 문자열을 넣어야 합니다.
(참고 : [Silverlight] 브라우저의 언어설정을 가져오려면? )
한국어 리소스를 추가함
이렇게 추가된 다른 언어 리소스는 항상 기본언어 리소스와 매칭이 되는 이름을 가지고 있어야 합니다.
(추가된 언어 리소스에만 있는 경우 에러 메시지가 표시됨)
이제 추가한 리소스 파일을 더블클릭하여 리소스 편집창 을 열어 값을 수정합니다.
값을 수정할 때는 추가된 다른 언어도 같이 수정해 줍니다.
이제 언어를 지정해 봅시다.
언어를 지정하기 위해서는 'Resources.resLanguage.Culture'를 변경해 주셔야 합니다.
변경하기 위한 코드는 간단합니다.
CultureInfo ciLang = new CultureInfo("[국가코드-언어코드]");
Resources.resLanguage.Culture = ciLang;
참 쉽죠?
물론 이것은 프로그램에 설정된 언어 설정을 바꾸는 것이지 리소스를 적용하는 코드가 아닙니다.
리소스를 적용하는 코드는 수작업으로 연결해주셔야 합니다.
Resources.resLanguage.[리소스 이름]
으로 값을 가지고 올 수 있습니다.
Label1.Text = Resources.resLanguage.Test;
이렇게 말이죠.
폼을 하나 추가해서 레이블 하나와 버튼 두 개를 추가합니다.
그리고 비하인드코드를 다음과 같이 작성합니다.
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Resources.resLanguage.Test;
}
protected void Button1_Click(object sender, EventArgs e)
{
CultureInfo ciLang = new CultureInfo("");
Resources.resLanguage.Culture = ciLang;
Response.Redirect(Request.Url.PathAndQuery);
}
protected void Button2_Click(object sender, EventArgs e)
{
CultureInfo ciLang = new CultureInfo("ko-KR");
Resources.resLanguage.Culture = ciLang;
Response.Redirect(Request.Url.PathAndQuery);
}
이제 실행해보시면 정상적으로 언어가 변경되는 것을 알 수 있습니다.
테스트를 웹 폼에서 했지만 이 방법은 대부분의 .NET에서 사용할 수 있습니다.