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);
}
}
출처 : 다년간의 프로그래밍 경험
'C#(CSharp) > WPF' 카테고리의 다른 글
사용자 정의 이벤트 만들기 (0) | 2015.04.08 |
---|---|
XAML Custom Namespace (0) | 2015.04.08 |
Mutex를 이용해서 1개의 프로세스만 동작하도록 하기 (0) | 2015.03.22 |
WPF 프로그램 UI 없이 자동으로 종료 되기 (0) | 2015.03.21 |
UI 쓰레드 (UI Thread) (0) | 2015.03.21 |