Я изучаю локализацию интерфейса и использую WPF в Visual Studio 2008. Моя цель для моей программы - сделать так, чтобы пользователь мог нажать кнопку и изменить язык, отображаемый в окне. Я пытался изменить свои файлы ресурсов во время выполнения в разделе кода программной части, когда пользователь нажимает кнопку.
Я прочитал этот вопрос: Программно изменить язык файла ресурсов (resx ) в программном коде
Однако это не кажется мне решением, потому что я хочу внести вышеуказанное изменение в событие нажатия кнопки. Когда я пытаюсь это сделать, кажется, что я не могу использовать это решение, потому что защищенная функция из другого вопроса не может войти в событие действия.
Вот что я пробовал безуспешно, основываясь на предыдущем вопросе:
/// Change to English-US
private void Button2_Click(object sender, RoutedEventArgs e)
{
protected override void InitializeCulture()
{
base.InitializeCulture();
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
}
}
/// Change to German
private void Button3_Click(object sender, RoutedEventArgs e)
{
protected override void InitializeCulture()
{
base.InitializeCulture();
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
}
}
Я программирую в школе и самостоятельно уже пару лет, так что я не абсолютный новичок. Однако я новичок в C# и WPF, и именно с этим я сейчас работаю. Насколько я знаю, у вас не может быть функции внутри функции, как у меня в моем коде. Единственная причина, по которой я поместил его туда, заключается в том, что мне нужно, чтобы он работал с событием нажатия кнопки.
Помощь в этом будет принята с благодарностью.
Вот новый код:
namespace LocalizationConcept
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
Properties.Resources.Culture = new CultureInfo(ConfigurationManager.AppSettings["Culture"]);
///InitializeComponent();
}
/// Exit Button
private void button1_Click(object sender, RoutedEventArgs e)
{
System.Environment.Exit(0);
}
private void ChangeCulture(string cultureKey)
{
try
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureKey);
}
catch (Exception err)
{
System.Environment.Exit(0);
}
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
ChangeCulture("en-US");
}
private void Button3_Click(object sender, RoutedEventArgs e)
{
ChangeCulture("de-DE");
}
}
}