WPF-지역화
지역화는 응용 프로그램이 지원하는 특정 문화권에 맞게 응용 프로그램 리소스를 지역화 된 버전으로 변환하는 것입니다.
응용 프로그램을 개발하고 응용 프로그램이 한 가지 언어로만 제공되면 고객 수와 비즈니스 규모가 제한됩니다. 고객 기반을 늘리고 비즈니스도 증가 시키려면 제품을 사용할 수 있고 전 세계 고객에게 도달 할 수 있어야합니다. 비용 효율적localization 더 많은 고객에게 다가 갈 수있는 가장 경제적이고 가장 경제적 인 방법 중 하나입니다.
WPF에서 지역화 가능한 응용 프로그램은 다음을 사용하여 매우 쉽게 만들 수 있습니다. resx가장 간단한 현지화 솔루션입니다. 작동 원리를 이해하기 위해 간단한 예를 들어 보겠습니다.
이름으로 새 WPF 프로젝트 만들기 WPFLocalization.
솔루션 탐색기에서 속성 폴더 아래에 Resources.resx 파일이 표시됩니다.
XAML 파일에서 액세스 할 수 있도록 access modifier를 internal에서 public으로 변경합니다.
이제 애플리케이션에서 사용할 다음 문자열의 이름과 값을 추가합니다.
Resources.en.resx 및 Resources.ru-RU.resx라는 이름의 Resources.resx 파일 사본 두 개를 만듭니다. 이는 언어 및 국가 / 지역 이름과 관련된 명명 규칙이며 NLS (National Language Support) API 참조 (https://msdn.microsoft.com/en-us/goglobal/bb896001.aspx ) 페이지.
Resources.ru-RU.resx의 값을 아래와 같이 러시아어 단어로 변경합니다.
디자인 창으로 이동하여 텍스트 상자 3 개, 레이블 3 개, 버튼 3 개를 드래그 해 보겠습니다.
XAML 파일에서 먼저 네임 스페이스 선언을 추가하여 리소스 지역화 xmlns : p = "clr-namespace : WPFLocalization.Properties"를 사용합니다.
아래와 같이 모든 컨트롤의 속성을 설정합니다. 이 예제에서는 XAML 파일에있는 창 제목, 단추 및 레이블의 내용에 대해 하드 코딩 된 문자열을 사용하지 않습니다. * .resx 파일에 정의 된 문자열을 사용합니다. 예를 들어, 창의 제목에는 “Title = "{x : Static p : Resources.Title}"” 과 같이 * .resx 파일에 정의 된 제목 문자열을 사용합니다 .
다음은 다른 속성을 사용하여 컨트롤을 만들고 초기화하는 XAML 파일입니다.
<Window x:Class = "WPFLocalization.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "clr-namespace:WPFLocalization"
xmlns:p = "clr-namespace:WPFLocalization.Properties"
Title = "{x:Static p:Resources.Title}" Height = "350" Width = "604">
<Grid>
<TextBox x:Name = "textBox" HorizontalAlignment = "Left" Height = "23"
Margin = "128,45,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/>
<Label x:Name = "label" Content = "{x:Static p:Resources.Name}"
HorizontalAlignment = "Left" Margin = "52,45,0,0" VerticalAlignment = "Top" Width = "86"/>
<TextBox x:Name = "textBox1" HorizontalAlignment = "Left" Height = "23"
Margin = "128,102,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/>
<Label x:Name = "label1" Content = "{x:Static p:Resources.Address}"
HorizontalAlignment = "Left" Margin = "52,102,0,0" VerticalAlignment = "Top" Width = "86"/>
<TextBox x:Name = "textBox2" HorizontalAlignment = "Left" Height = "23"
Margin = "128,157,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "80"/>
<Label x:Name = "label2" Content = "{x:Static p:Resources.Age}"
HorizontalAlignment = "Left" Margin = "52,157,0,0" VerticalAlignment = "Top" Width = "86"/>
<Button x:Name = "button" Content = "{x:Static p:Resources.OK_Button}"
HorizontalAlignment = "Left" Margin = "163,241,0,0" VerticalAlignment = "Top" Width = "75"/>
<Button x:Name = "button1" Content = "{x:Static p:Resources.Cancel_Button}"
HorizontalAlignment = "Left" Margin = "282,241,0,0" VerticalAlignment = "Top" Width = "75"/>
<Button x:Name = "button2" Content = "{x:Static p:Resources.Help_Button}"
HorizontalAlignment = "Left" Margin = "392,241,0,0" VerticalAlignment = "Top" Width = "75"/>
</Grid>
</Window>
위의 코드가 컴파일되고 실행되면 다른 컨트롤이 포함 된 다음 창이 표시됩니다.
기본적으로 프로그램은 기본 Resources.resx를 사용합니다. Resources.ru-RU.resx 파일에 정의 된 러시아어로 텍스트를 표시하려면 아래와 같이 App.xaml 파일에서 프로그램이 시작될 때 명시 적으로 문화권을 설정해야합니다.
using System.Windows;
namespace WPFLocalization {
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application {
App() {
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU");
//System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
}
}
}
응용 프로그램을 실행하면 모든 텍스트가 러시아어로 표시됩니다.
위의 코드를 실행하고 다른 문화권에 대한 resx 파일도 생성하는 것이 좋습니다.