2009년 11월 2일 월요일

NETCF 국제화

Visual Studio 2008에서 자체적으로 생성하는 리소스 파일 형태가 resx이므로 가장 일반적인 방법은 resx 파일을 이용하는 방법이 아닌가 싶다. 다른 대안으로는 resource 파일을 이용하는 형태이나 이는 일련의 추가 과정들도 있으므로 스킵.

일단 나라별 리소스 파일들이 필요하다. Nice+의 경우는

  • Resources.resx
  • Resources.ko-KR.resx

2개의 파일을 생성한다. 2개의 리소스 파일들의 내용은 같은 key를 쓰고 언어에 맞는 value들을 작성한다.

그 다음에 필요한 것은 ResourceManager를 생성하는 것. ResourceManager 이외에 Assembly와 CultureInfo를 불러 와야하므로 총 3개의 namespace 이용이 필요하다.

using System.Globalization;
using System.Reflection;
using System.Resources;

다음은 ResourceManager 객체를 만드는 일.

ResourceManager resources =
    new ResourceManager(Resources.ResourceManager.BaseName, Assembly.GetExecutingAssembly());

이제는 ResourceManager를 통해서 필요한 내용의 값들만 가져오면 된다.

string value = resources.GetString("key", CultureInfo.CurrentUICulture)

NETCF가 아닌 환경에서는 현재 thread에 CultureInfo를 등록하고 가져올 수 있는 방법이 있는데 NETCF는 그런 방법이 없어서 따로 CultureInfo를 가져오는 클래스를 만들던가 아니면 Nice+ 처럼 언어 변경은 하지 못하고 그냥 CultureInfo.CurrentUICulture를 이용하는 방법이 있다. Nice+에서는 T스토어는 그냥 한국어 버전만 다른 App store들은 영문만 지원하면 되어 각 스토어 사용자들의 폰의 CultureInfo.CurrentUICulture들이 각각 한국어이거나 아니거나의 경우이기에 위와 같이 처리를 했다.

댓글 없음:

댓글 쓰기