WPF 에서 다국어 지원하는 방법이 여러가지 있습니다.

MS 에서는 LocBaml 툴을 사용해서 다국어 지원을 권장(?) 하고 있습니다.

http://msdn.microsoft.com/ko-kr/library/ms746621(v=vs.90).aspx

근데 이것은 프로그램이 개발이 완료 되고 나서 했을 때 가장 빠르고 편하며 아래와 같이 엑셀파일도 만들어 주어서 입력하기도 편합니다.

image

 

배포를 하면 아래와 같이 개개의 언어별로 생성이 됩니다.

imageimage

참고 아래와 같이 msbuild 를 이용해서 컨트롤의 UID를 만드는데

*msbuild /t:updateuid helloapp.csproj

프로젝트 위치에 ex)d:\Visual Studio2010\wpfAppliction1 <--- 공백등이 있으면 오류가 발생합니다.

image

 

공백없이 잘 실행된 예

image

 

컨텐츠내용이 변경되면 다시 파일을 만들어야함!!!

암튼 저는 개발 중이라 반수동(?)으로 다국어 지원을 아래와 같이 하기로 맘먹음 ㅋ

다국어 지원하기

프로젝트 구성

image

 

image

 

다국어 파일만들기

영어

image

image

한국어

image

image

App.xaml 에서 만들어진 다국어 리소스를 등록합니다.

image

 

디자인모드에서 다국어 리소스 반영하기

image

( 다국어 내용이 많아지면 안습 이겠따 ㅡ_ㅡ )

소스코드

아래코드는 특별한것은 없습니다.

  string requestedCulture = string.Format("StringResources.{0}.xaml", culture); 리소스 파일을 찾아서

그 리소스를 기본으로 사용합니다.

 

    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            //SelectCulture("ko-KR");
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
           
            SelectCulture("ko-KR");
            ViewCultInfo();
        }



        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            SelectCulture("en-US");
            ViewCultInfo();
        }

        private void ViewCultInfo()
        {
            this.textBlock4.Text = CultureInfo.CurrentCulture.DisplayName;
            this.textBlock1.Text = FindResource("HelloText").ToString();
        }


        public static void SelectCulture(string culture)
        {
            // List all our resources       
            List<ResourceDictionary> dictionaryList = new List<ResourceDictionary>();
            foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
            {
                dictionaryList.Add(dictionary);
            }
            // We want our specific culture       
            string requestedCulture = string.Format("StringResources.{0}.xaml", culture);
            ResourceDictionary resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
            if (resourceDictionary == null)
            {
                //리소스를 찾을수 없다면 기본 리소스로 지정      
                requestedCulture = "StringResources.ko-KR.xaml";
                resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
            }
             if (resourceDictionary != null)
             {
                Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
                Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
            }

            //지역화 설정
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
        }

    }

 

실행된 모습

image

image

+ Recent posts