XAML 中使用 .resx 资源的多语言 WPF 项目
Multilingual WPF Project using .resx resource in XAML
我正在使用 .resx
文件开发一个多语言 WPF 项目,我为英语创建了两个文件 Resources.resx
,为阿拉伯语创建了两个文件 Resources.ar-LY.resx
,我都添加了一个字符串名为 SampleText
的资源具有不同的值。
在我的 XAML window 中,我将资源值分配给 TextBlock
的 Text
属性,如下所示:
<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中加载保存的语言名称和设置它。
我正在使用 .resx
文件开发一个多语言 WPF 项目,我为英语创建了两个文件 Resources.resx
,为阿拉伯语创建了两个文件 Resources.ar-LY.resx
,我都添加了一个字符串名为 SampleText
的资源具有不同的值。
在我的 XAML window 中,我将资源值分配给 TextBlock
的 Text
属性,如下所示:
<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中加载保存的语言名称和设置它。