c# - 在 XAML 中使用 .resx 资源的多语言 WPF 项目
问题描述
我正在使用文件开发一个多语言 WPF 项目,我为英语和阿拉伯语.resx
创建了两个文件,我添加了一个名为具有不同值的字符串资源。Resources.resx
Resources.ar-LY.resx
SampleText
在我的 XAML 窗口中,我将资源值分配给以下Text
属性TextBlock
:
<TextBlock x:Name="txbSampleText" Text="{x:Static p:Resources.SampleText}"/>
然后..我使用以下行将应用程序文化更改为阿拉伯语:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-LY");
问题:项目文化发生了变化,但Textblock
总是从中获得价值Resources.resx
,
我找到了这个解决方案,但该解决方案使用后面的代码而不是 XAML,您可以从这里下载包含问题的测试应用程序
请提供任何帮助
解决方案
您以正确的方式创建了 Resources.lng.resx 文件,这应该可以工作。但是现在,让我们讨论一下为什么不这样做: InitializeComponent() 方法是什么?此方法绘制元素,设置它们的样式......如果元素的文本绑定到资源,则通过键获取值并设置它。那么在你的情况下会发生什么?窗口启动,所有文本都由 InitializeComponent() 方法设置,之后,当“绘图”完成时,你改变文化,这是错误的。如果您希望从任何其他语言资源文件中获取您的文化,您应该在调用 InitializeComponent() 之前设置 UICulture。
这也意味着通过这种方式您不能在程序运行时更改语言,如果您想更改语言,您应该将其保存在某个地方,重新启动程序,从保存的空间中加载保存的语言名称并设置它。
推荐阅读
- javascript - 为什么我无法访问使用“new Array”构造函数创建的二维数组的 [0][0] 位置?
- python - Python,尝试使用 matplotlib 显示占用网格。但是y轴为负
- c# - 从命令行编译 C# 源代码(任何情况下,没有 Visual Studio)
- mel - 在 MEL 中对 Int 进行排序
- javascript - 为什么它显示错误 Uncaught TypeError: "Cannot read property 'addEventListener' of null"?
- javascript - 无法从 URL 获取
- c# - 我可以将远程机器主机名放在“msiexec.exe”命令中吗
- python - Pandas:根据列表从数据框中删除行,忽略首字母大写
- c# - Windows 窗体中的 C# Audiograph
- c++ - 如何在我的类中包含模板参数?