사용자가 여러 언어 중에서 선택할 수있는 소프트웨어를 만들고 싶습니다.SharpDevelop 4.2에서 국제화 된 WPF 프로젝트를 시작하는 방법은 무엇입니까?
처음에는 Internationalization을 처리하는 방법을 배우고 싶습니다.
IDE에서는 SharpDevelop 또는 #develop를 사용하지만 맞춤법을 지정합니다. 저는 XAML/WPF를 지금 배우고 있기 때문에 C#과 WPF를 사용하고 싶습니다.
그래서 ShardDevelop에서 새 WPF 프로젝트를 만듭니다. 주 창에서 ComboBox 및 TextBlock을 만듭니다.
ComboBox는 "독일어"와 "영어"의 두 항목을 가져옵니다. textBlock에 "Hallo Welt!"가 표시되어야합니다. 또는 "Hello World!"를 선택합니다.
이제 막 붙어있는 부분이 있습니다. 각 언어는 XML/XAML 스타일 (의미가 있음)로 별도의 파일을 얻습니다. 이 파일들은 어디에 있으며, 선택한 언어의 텍스트가로드되도록 파일과 내용이 어떻게로드됩니까?
몇 가지 예를 발견했지만 모두 Resource-DLL을 만들고 이상한 프로그램을 사용하여 CSV 파일로 다시 디 컴파일 한 경우 ... 더 쉽게 얻을 수있는 방법이 아닌가요?
나는 다음 단계를 밟았다. TextBlock의 텍스트가 이제 "{StaticResource Strings.MainForm.hwText}"를 통해로드됩니다. 그것은이 지금과 같습니다
<TextBlock Text="{StaticResource Strings.MainForm.hwText}" />
또한 내가 독일에 대해 하나 개있는 ResourceDictionary를 만들어 모두가 내가 TextBlock의 사용되는 키를 정의 영어 하나.
Application.Resources 파트에서 기본값 당 ResourceDictionary 중 하나를로드합니다.
문제는 다음과 같습니다. 런타임 중에이 사전을 "언로드"하고 다른 것과 바꾸려면 어떻게합니까?
물론 ComboBox의 SelectionChange-Event를 사용하지만 그곳에서 무엇을합니까?
문제가 해결되었습니다. 난 내 필요에 이벤트 처리기의 약간의 코드를 변경하지만 덕분에
을 kmatyaszek합니다 :
Uri baseUri = new Uri(AppDomain.CurrentDomain.BaseDirectory);
Uri uri = new Uri(baseUri,"Languages\\lang."+((sender as ComboBox).SelectedItem as ComboBoxItem).Tag.ToString()+".xaml");
if(File.Exists(uri.LocalPath) || File.Exists((uri = new Uri(baseUri,"Languages\\lang.de-DE.xaml")).LocalPath)){
ResourceDictionary dict = new ResourceDictionary();
dict.Source = uri;
this.Resources.MergedDictionaries.Add(dict);
}
나는 SharpDevelop에 대해 모르지만 VS에서는 정말 쉽게 .resx 파일을 만들 수 있습니다. 속성 창에서 현지화를 설정할 수 있습니다. 어쩌면 SharpDevelop에는 유사한 것이있다. –
tipp에 감사드립니다. :) –
당신이 그것을 알게되면 찾는다. –