【问题标题】:WPFLocalizationExtension not translating first control (code behind)WPFLocalizationExtension 不翻译第一个控件(代码隐藏)
【发布时间】:2023-04-10 20:09:01
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf resx wpflocalizationextension


    【解决方案1】:

    终于想通了。我仍然需要在我的 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 中,一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 2016-09-05
      • 2013-12-26
      相关资源
      最近更新 更多