본문 바로가기
C#(CSharp)/WPF

다국어 작업(Globalization, Localization)

by swconsulting 2015. 4. 2.

WPF에서 다국어 작업 하는것에 정리 해 보았습니다.


----------------------------------------------------------------------------------------------------------

** 오늘 다국어 관련 작업을 하는데 xaml에서 적용이 잘 안되는 현상이 발생했습니다. 한 30분 삽질하다

visual studio를 재시작한 후 의도 했던 대로 정상 동작했습니다. xaml에서 외부 라이브러리 참조가 잘 안될 경우

아래 2가지를 추천합니다.

1) 맞춤법, 대소문자를 다시 확인 합니다.

2) visual studio 2013을 종료한후 다시 시작한 후, 모두 rebuild합니다.

----------------------------------------------------------------------------------------------------------


1) 우선 다국어 전용 리소스 라이브러리 프로젝트를 생성합니다.


2) 생성한 프로젝트에 리소스 파일(*.resx)를 추가 합니다.

여러 언어을 지원해야 하면 아래 형식으로 생성하면 됩니다.


ex)

현재 default 언어 : Resources.resx

영어 : Resources.en-US.resx

러시아 : Resources.ru-RU.resx


3) 중요 생성한 리소스 파일 접근 속성(Access Modifier)을 아래 처럼 Public 으로 꼭 변경해야 합니다.

 

 




4) 다국어 Code Behind로 적용하기


<Localization.dll>


namespace Localization

{

    public class LocalizationLib

    {

        public static string GetLocalizaionString(string key)

        {

            string uiString; 


            ResourceManager rm = new ResourceManager("Localization.Resx.Resources", Assembly.GetExecutingAssembly()); 


            uiString = rm.GetString(key);


            return uiString;

        }

    }

}


<MainWindow.xaml.cs>


public MainWindow()

        {

            InitializeComponent();             


            this.Title = Localization.LocalizationLib.GetLocalizaionString("Main_Title");

            this.Title = Localization.Resx.Resources.Main_Title;

        }


5) XAML에서 다국어 적용하기

<MainWindow.xaml>

<Window x:Class="SWConsultingStickyNote.MainWindow"

        xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation

        xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml

        xmlns:noteItems="clr-namespace:SWConsultingStickyNote.UICommon"       

        xmlns:locText="clr-namespace:Localization.Resx;assembly=Localization"  <- 다국어 라이브러리 선언

        WindowStartupLocation="CenterScreen"

        Icon="Images/MainAppIcon.ico"       

        Title="{x:Static locText:Resources.Main_Title}"  <-위에 선언한 locText를 static 으로 사용

        Height="400" Width="600">


6) 다국어 적용하는 방법

<app.xaml.cs>



public partial class App : Application

    {

        protected override void OnActivated(EventArgs e)

        {

            System.Threading.Thread.CurrentThread.CurrentUICulture =

                new System.Globalization.CultureInfo("en-US"); 

-> 동작하는 current main 스레드 언어를 설정한다.


            base.OnActivated(e);

        }

     }


출처 : 다년간의 프로그래밍 경험