我遇到DynamicResource和MergedDictionary的问题。 我有一个可以用不同语言(英语,西班牙语,德语)显示的软件,我有很多ResourceDictionaries。 我给你一个字典的例子,叫做“Documentation.xaml”:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:String x:Key="ProductNumber">Product Number</system:String>
<system:String x:Key="Notes">Notes</system:String>
<system:String x:Key="Logo">Logo</system:String>
<system:String x:Key="InspectionTask">Inspection task</system:String>
<system:String x:Key="ProductDescription">Product Description</system:String>
</ResourceDictionary>
这是我的“默认”ResourceDictionary。 我有两个其他字典,名为“Documentation.de-DE.xaml”和Documentation-es-ES.xaml“,用于德语和英语。 它们与默认的Dictionary几乎相同。唯一的区别是显示的字符串。
现在我的问题: 当我通过“DynamicResource”访问ressource时,我从活动的Dictionary中获取结果。 (示例:我在西班牙语中获得“ProductDescription”的“Descripcion de producto”。)如果词典中的条目可用,一切正常。 当一个条目不可用时,会出现问题。 假设以下情况: 我正在以西班牙语运行该软件,并希望将其更改为德语,但字典中的一个条目不可用,那么该软件没有使用它的默认条目。我仍然拥有西班牙语词典中的价值。
在我看来,DynamicResource在这种情况下崩溃并且不会改变。我没有证据证明它真的崩溃了。我唯一的事实是,如果条目不存在,文本框将不会改变! 有没有办法处理这次崩溃? (如果是一个)
我希望我能提供您需要的所有信息。如果没有,请告诉我
答案 0 :(得分:2)
假设以下情况:我正在运行西班牙语软件并希望将其更改为德语,但字典中的一个条目不可用,则软件不使用默认条目。我仍然拥有西班牙语词典中的价值。
这是预期的行为。使用DynamicResource
标记扩展设置的目标属性仅在资源更改时更改。如果资源已删除,则不会重置目标属性。
您应确保每个ResourceDictionary
包含完全相同的翻译键。
另一种选择是实现自己的自定义标记扩展。有关此内容的更多信息,请参阅以下链接。
https://wpftutorial.net/LocalizeMarkupExtension.html http://10rem.net/blog/2011/03/09/creating-a-custom-markup-extension-in-wpf-and-soon-silverlight https://github.com/SeriousM/WPFLocalizationExtension https://www.codeproject.com/articles/35159/wpf-localization-using-resx-files
答案 1 :(得分:0)
更改语言时,是否更改了所有这些文化设置?
CultureInfo.DefaultThreadCurrentCulture = newCultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = newCultureInfo;
Thread.CurrentThread.CurrentCulture = newCultureInfo;
Thread.CurrentThread.CurrentUICulture = newCultureInfo;
答案 2 :(得分:0)
假设以下情况:我正在运行西班牙语软件并希望将其更改为德语,但字典中的一个条目不可用,则软件不使用默认条目。我仍然拥有西班牙语词典中的价值。
这是有道理的。如果根本没有条目,为什么价值会发生变化!
我建议在每种语言中添加缺少的条目&#39;带有空字符串值的资源字典。