我在WPF应用程序中看到了奇怪的行为(我在示例应用程序中重现了这一点以确定)。
当应用程序启动时,我将CultureInfo.CurrentCulture和CultureInfo.CurrentUICulture设置为例如法语,在主应用程序窗口加载之前。然后主要的应用程序窗口加载和本地化的文本按预期显示,用法语,如下所示:
<Window.Resources>
<Strings x:Key="Resources"/>
</Window.Resources
<Button Content={Binding Label, Source={StaticResource Resources}}/>
问题是,如果我点击按钮,文化和按钮的文本将重置为en-US。我为Click事件添加了一个事件处理程序,其中CurrentCulture和CurrentUICulture都重置为“en-US”。
知道为什么会这样吗?这会以某种方式自动发生似乎很奇怪。
注意:我也尝试过做
var cultureName = CultureInfo.CurrentCulture.Name;
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(cultureName)));
和
this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
在主窗口加载之前,但没有帮助,文化仍然会被重置。
更新:我在WPF论坛(https://social.msdn.microsoft.com/Forums/vstudio/en-US/884af2cb-fcc3-4cfe-bea0-7a84f74583a8/culture-gets-reset-on-button-click?forum=wpf)上也提出了这个问题。在那里,我描述了实际场景可能更好一些:我需要能够在应用程序启动时设置特定的文化,并在整个应用程序的生命周期中“保留”它。不幸的是,当点击按钮时,文化会被重置,如上所述。
答案 0 :(得分:0)
可能与您的Window.Resources-&gt;显示资源字符串的绑定方法有关。我显示这样的本地化字符串:
<Window x:Class="CultureTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:p="clr-namespace:CultureTest.Properties"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="{x:Static p:Resources.Greeting}"/>
</Grid>
并在App.OnStartup中设置文化:
protected override void OnStartup(StartupEventArgs e)
{
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU");
base.OnStartup(e);
}
它保持了它的文化。这是你的选择吗?