Я хочу создать программное обеспечение, в котором пользователь может выбирать между несколькими языками.
Для начала я хочу узнать, как справиться с интернационализацией, поскольку я никогда раньше этого не делал.
В качестве IDE я использую SharpDevelop или #develop, но вы бы написали это по буквам. Я хочу использовать C # и WPF, так как сейчас я изучаю XAML / WPF.
Итак, я создаю новый WPF-проект в ShardDevelop. В главном окне я создаю ComboBox и TextBlock.
ComboBox получает две записи: «немецкий» и «английский». Текстовый блок должен показывать "Hallo Welt!" или «Hello World!» в зависимости от выбранного языка.
Теперь наступает момент, когда я застреваю. Я предполагаю, что каждый язык получает отдельный файл в стиле XML / XAML (имеет смысл). Где находятся эти файлы и как они и их содержимое загружаются, чтобы загружался текст выбранного языка?
Я нашел несколько примеров, но все они связаны с созданием Resource-DLL и использованием какой-то странной программы для их декомпиляции обратно в файл csv ... я не понимаю, разве нет более простого способа?
Я сделал следующий шаг. Текст TextBlock теперь загружается через "{StaticResource Strings.MainForm.hwText}". Теперь это выглядит так:
<TextBlock Text="{StaticResource Strings.MainForm.hwText}" />
Также я создал один ResourceDictionary для немецкого языка и один для английского, которые определяют ключ, который я использовал в TextBlock.
В Application.Resources Part я загружаю один из ResourceDictionary по умолчанию.
Теперь проблема заключается в следующем: как я могу «выгрузить» этот словарь во время выполнения и заменить его другим?
Конечно, я использую событие SelectionChange ComboBox, но что мне там делать?
Задача решена!! Благодаря 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);
}
.resx
. В окне свойств вы можете установить локализацию. Может быть, у SharpDevelop есть что-то подобное. - person The_Cthulhu_Kid   schedule 17.12.2012