我正在学习界面本地化并在Visual Studio 2008中使用WPF。我的程序的目标是使用户可以单击按钮并更改窗口中显示的语言。当用户单击按钮时,我一直在尝试在代码隐藏部分中运行时更改我的资源文件。
我已阅读此问题:Programmatically change resource file language (resx) in Code Behind
但是,这对我来说似乎不是一个解决方案,因为我想在按钮点击事件上进行上述更改。当我尝试这样做时,似乎我无法使用此解决方案,因为来自其他问题的受保护功能无法进入操作事件。
根据上一个问题,以下是我没有运气的尝试:
/// 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");
}
}
我已经在学校和我自己编程了几年,所以我不是一个绝对的noobie。但是,我是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");
}
}
}
答案 0 :(得分:1)
似乎WPF通过谈论本地化和全球化而不支持Winforms的相同功能。虽然我发现了一些有趣的文章,这些文章一步一步地展示了如何在运行时替换语言。
答案 1 :(得分:0)
它不需要在它自己的功能中(虽然它可能是)。请考虑以下事项:
private void ChangeCulture(string cultureKey)
{
try
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureKey);
}
catch (Exception err)
{
// That culture probably doesn't exist
}
}
private void ButtonA_Click(object sender, EventArgs args)
{
ChangeCulture("en-US");
}
private void ButtonB_Click(object sender, EventArgs args)
{
ChangeCulture("de-DE");
}
编辑:
I found this on another post它获得了+100赏金,所以我认为这是一个很好的解决方案。看看吧。