因此尝试使用wpf本地化扩展。
我们的按钮/控件都将其ID存储在后面的代码中,因此我最终创建了一个翻译服务,以便在后面的代码中进行翻译。所以它只是绑定完成的翻译。
我们还将翻译存储在单独的项目中,因为外部组处理翻译。因此,我的翻译方法设置如下。
private string Translate(string id)
{
string uiString;
var locExtension = new LocTextExtension
{
Key = "XXX.UI.Resources",
ResourceIdentifierKey = id
};
locExtension.ResolveLocalizedValue( out uiString );
return uiString ?? id;
}
然而,当我的页面被加载时,似乎它并没有翻译页面上的第一个按钮。第一个按钮返回Buttun_BtnTxt而不是翻译的值。我尝试过交换哪个按钮是列表中的第一个按钮,它始终是第一个失败的按钮。
如果我放入一些重试功能,它仍然会失败。 (将上面的代码放在while循环中,检查uistring == null,并重试50000次)
如果我离开第一页,所有其他页面加载正常,如果我导航回来,翻译也很好。我不能为我的生活弄清楚为什么它不是第一次翻译。
过去是否有人必须做这样的事情并遇到同样的问题?
再看看。添加了检查已加载程序集的代码在第一次运行时(它失败了),这是唯一存在的资源实例。
XXX.UI.Resources, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
第一次尝试失败后,我再次检查了程序集,现在也出现了以下条目。
XXX.UI.Resources.resources, Version=0.0.0.0, Culture=de-DE, PublicKeyToken=null
XXX.UI.Resources.resources, Version=0.0.0.0, Culture=ja-JP, PublicKeyToken=null
XXX.UI.Resources.resources, Version=0.0.0.0, Culture=zh-Hans, PublicKeyToken=null
不知道为什么这些会在加载时延迟,或者是否可能导致问题。但这是我现在唯一能想到的。
答案 0 :(得分:0)
最终弄明白了。我仍然需要在我的xaml中拥有以下内容。
xmlns:lex="http://wpflocalizeextension.codeplex.com"
lex:LocalizeDictionary.DesignCulture="en"
lex:ResxLocalizationProvider.DefaultAssembly="XXX.UI.Resources"
lex:ResxLocalizationProvider.DefaultDictionary="Resources"
至少有一次,没有它,本地化的东西根本不起作用,即使你在后面的代码中进行本地化。
它没有翻译第一个控件的原因是它首先通过VM,然后点击调用此代码的xaml。之后代码隐藏翻译工作正常。
将xaml移动到我的shellview,一切都很好。