XAML 中使用 .resx 资源的多语言 WPF 项目

Multilingual WPF Project using .resx resource in XAML

我正在使用 .resx 文件开发一个多语言 WPF 项目,我为英语创建了两个文件 Resources.resx,为阿拉伯语创建了两个文件 Resources.ar-LY.resx,我都添加了一个字符串名为 SampleText 的资源具有不同的值。

在我的 XAML window 中,我将资源值分配给 TextBlockText 属性,如下所示:

<TextBlock x:Name="txbSampleText" Text="{x:Static p:Resources.SampleText}"/>

然后 .. 我使用以下行将应用程序区域性更改为阿拉伯语:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-LY");

问题: 项目文化发生了变化,但 Textblock 始终从 Resources.resx

获取值

我找到了THIS solution but the solution uses code behind instead of XAML, You can download a test application that contain the issue from HERE

请帮忙

您以正确的方式创建了 Resources.lng.resx 个文件,这应该可行。 但是现在,让我们讨论为什么它没有: InitializeComponent() 方法是什么? 这种方法绘制元素,设置它们的样式...如果元素的文本绑定到资源,则通过键获取值并设置它。 那么在你的情况下会发生什么? Window 开始,所有文本都由 InitializeComponent() 方法设置,之后,当 'drawing' 完成时,您改变了文化,这是错误的。 如果你想从任何其他语言资源文件中获取你的文化,你应该在调用 InitializeComponent() 之前设置 UICulture。

这也意味着通过这种方式你不能在程序运行时改变语言,如果你想改变语言,你应该把它保存在某个地方,重新启动程序,从保存的space中加载保存的语言名称和设置它。