首页 > 解决方案 > 在 XAML 中使用 .resx 资源的多语言 WPF 项目

问题描述

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

在我的 XAML 窗口中,我将资源值分配给以下Text属性TextBlock

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

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

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

问题:项目文化发生了变化,但Textblock总是从中获得价值Resources.resx

我找到了这个解决方案,但该解决方案使用后面的代码而不是 XAML,您可以从这里下载包含问题的测试应用程序

请提供任何帮助

标签: c#wpfxamlculture

解决方案


您以正确的方式创建了 Resources.lng.resx 文件,这应该可以工作。但是现在,让我们讨论一下为什么不这样做: InitializeComponent() 方法是什么?此方法绘制元素,设置它们的样式......如果元素的文本绑定到资源,则通过键获取值并设置它。那么在你的情况下会发生什么?窗口启动,所有文本都由 InitializeComponent() 方法设置,之后,当“绘图”完成时,你改变文化,这是错误的。如果您希望从任何其他语言资源文件中获取您的文化,您应该在调用 InitializeComponent() 之前设置 UICulture。

这也意味着通过这种方式您不能在程序运行时更改语言,如果您想更改语言,您应该将其保存在某个地方,重新启动程序,从保存的空间中加载保存的语言名称并设置它。


推荐阅读