我尝试更改WPF应用在单击事件中使用的语言,但它没有更改。
private void menuItemGerman_Click(object sender, RoutedEventArgs e)
{
Settings.Default.Culture = "de-DE";
Thread.CurrentThread.CurrentCulture = new CultureInfo(Settings.Default.Culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Settings.Default.Culture);
}
我错过了什么?
4条答案
按热度按时间ryoqjall1#
我错过了什么?
您更改了向线程注册的区域性和字符串。Format现在将使用此区域性,但您需要重新加载WPF层次结构中的所有本地化项。
WPF Localization – On-the-fly Language Selection提供了更多信息。
zte4gxcn2#
如果您有资源文件,例如:
...并希望在运行时更改本地化,
...并且不想弄乱额外的资源字典和重新编码所有UI本地化,
它将与
但它不会更改已显示窗口的语言。
为了实现这一点,需要更多的编码--必须管理应用程序生命周期,而不是默认的生命周期。
首先,从App.xaml中删除StartupUri:
第二步,实现一个类,它现在负责应用程序的生命周期:
不要忘记将项目属性/应用程序页面上的启动对象更改为LocApp!
最后,在主窗口代码中实现一些切换语言的代码:
确保提供的本地化代码与resx文件语言代码之一匹配(在本示例中为“hu-hu”)!
此解决方案将关闭并重新打开主窗口(使用所选语言),如果主窗口以其他方式关闭,则将退出。
z31licg03#
我也遇到过这个问题,我的解决方案是:
我创建了一个类,它将返回一个带有键和标签的字典:
接下来,再用一个类来获取资源:
当您需要一些语言时:
一旦你不能引发(RaisePropertyChanged())静态属性,就使用这个:
现在您可以更新语言:
这样筹:
并使用标签:
cqoc49vn4#
这对某些人来说可能会派上用场。我已经使用了上面乔治& Chris Schaller给出的建议,使这个在我的项目中工作,而不需要创建新的应用程序类。
其他必要的代码可以从乔治的答案中获取。不确定这是一个多好的解决方案,但对我来说很好。