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

问题描述

我正在使用Resources.resx文件进行多语言WPF项目,我为英文创建了两个文件Resources.ar-LY.resx,对于阿拉伯语创建了SampleText文件,我同时添加了一个名为Text具有不同的值。

在XAML窗口中,我将资源值分配给TextBlock的{​​{1}}属性,如下所示:

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

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

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

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

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

请帮助

解决方法

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

这也意味着以这种方式您无法在程序运行时更改语言,并且如果要更改语言,则应将其保存在某个位置,重新启动程序,从节省的空间中加载保存的语言名称并进行设置。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...