我想创建一个软件,用户可以在多种语言之间进行选择。
首先,我想学习如何处理国际化,因为我以前从未这样做过。
作为 IDE,我使用 SharpDevelop 或 #develop,但你可以拼写它。
我想使用 C# 和 WPF,因为我目前也在学习 XAML/WPF。
所以我在 ShardDevelop 中创建了一个新的 WPF 项目。
在主窗口上,我创建一个组合框和一个文本块。
组合框有两个条目:“德语”和“英语”。
文本块应显示“Hallo Welt!”或“Hello World!”,具体取决于所选的语言。
现在是我陷入困境的部分。
我想每种语言都有一个 XML/XAML 样式的单独文件(有道理)。
这些文件在哪里以及如何加载它们及其内容以便加载所选语言的文本?
我找到了几个例子,但都是关于创建 Resource-DLL 并使用一些奇怪的程序将它们反编译回 csv 文件......我不明白,有没有更简单的方法?
我采取了下一步。
TextBlock 的文本现在通过“{StaticResource Strings.MainForm.hwText}”加载。现在看起来像这样:
<TextBlock Text="{StaticResource Strings.MainForm.hwText}" />
我还为德语创建了一个 ResourceDictionary,为英语创建了一个 ResourceDictionary,它们都定义了我在 TextBlock 中使用的键。
在 Application.Resources 第一部分中,默认加载 ResourceDictionary 之一。
现在的问题是:我如何在运行时“卸载”这个字典并将其替换为另一个字典?
当然,我使用 ComboBox 的 SelectionChange-Event,但是我在那里做什么?
问题解决了!!感谢 克马蒂亚泽克
尽管我根据我的需要稍微更改了事件处理程序的代码:
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);
}