0

因此尝试使用 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

不知道为什么这些会延迟加载,或者这是否是导致问题的原因。但这是我现在唯一能想到的。

4

1 回答 1

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 中,一切都很好。

于 2017-07-13T13:26:56.563 回答