因此,尝试使用wpf本地化扩展。
我们的按钮/控件都将它们的in存储在后面的代码中,因此,我最终创建了一个翻译服务来翻译代码后面的代码。因此,它只是绑定完成的翻译。
在外部组处理翻译时,我们还将翻译存储在单独的项目中。因此,我的翻译方法设置如下。
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循环,检查== 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不知道为什么加载延迟,也不知道这是否是导致问题的原因。但这是我现在唯一能想到的。
发布于 2017-07-13 13:26:56
终于弄明白了。我仍然需要在我的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视图中,一切都很好。
https://stackoverflow.com/questions/45079273
复制相似问题