【问题标题】:WPF: Localize WPF Ribbon QAT context menu textsWPF:本地化 WPF 功能区 QAT 上下文菜单文本
【发布时间】:2011-02-16 08:54:48
【问题描述】:

我正在使用 .NET 4.0 WPF 功能区并正在寻找一种方法来本地化功能区上下文菜单字符串。默认情况下,右键单击功能区会显示“最小化功能区”等项目。我想将这些字符串本地化,例如显示“Multifunktionsleiste verbergen”。

我该怎么做?这可能吗?

【问题讨论】:

    标签: wpf visual-studio-2010 .net-4.0 ribbon


    【解决方案1】:

    对 userxyz 解决方案的(希望)完整扩展:

            FieldInfo pi;
    
            pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("AddToQATText", (BindingFlags.NonPublic | BindingFlags.Static));
            pi.SetValue(null, "RibbonContext_AddToQATText");
            pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("RemoveFromQATText", (BindingFlags.NonPublic | BindingFlags.Static));
            pi.SetValue(null, "RibbonContext_RemoveFromQATText");
            pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("ShowQATAboveText", (BindingFlags.NonPublic | BindingFlags.Static));
            pi.SetValue(null, "RibbonContext_ShowQATAboveText");
            pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("ShowQATBelowText", (BindingFlags.NonPublic | BindingFlags.Static));
            pi.SetValue(null, "RibbonContext_ShowQATBelowText");
            pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("MaximizeTheRibbonText", (BindingFlags.NonPublic | BindingFlags.Static));
            pi.SetValue(null, "RibbonContext_MaximizeTheRibbonText");
            pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("MinimizeTheRibbonText", (BindingFlags.NonPublic | BindingFlags.Static));
            pi.SetValue(null, "RibbonContext_MinimizeTheRibbonText");
    

    【讨论】:

      【解决方案2】:

      我不确定,但由于功能区库定义了 ResourcesManager,所以如果不从源代码重新编译库(如果我不正确,那么这里会很棒)是不可能的

      new ResourceManager("ExceptionStringTable", typeof(SR).Assembly);
      

      如果您要更改源,这些文本将存储在名为 ExceptionStringTable.txt 的资源文件中。

      字符串的标识符是:

      • RibbonContextMenu_ShowQATAbove
      • RibbonContextMenu_ShowQATBelow
      • RibbonContextMenu_MaximizeTheRibbon
      • RibbonContextMenu_MinimizeTheRibbon

      库的源代码可以从here 下载。在 RibbonControlsLibrary\Resources\ 中可以找到 Ribbon 资源的实现。

      【讨论】:

      • 嗯,这真的很可惜,但这似乎是唯一的方法。
      • 抱歉,Mark 的回复实际上效果更好,并且无需重新编译库...
      【解决方案3】:

      另一种方法是通过反射替换值:

        FieldInfo pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("AddToQATText", (BindingFlags.NonPublic | BindingFlags.Static));
        pi.SetValue(null, "Localized text");
      

      此代码必须在第一次使用功能区控件(通常是主窗口的 InitializeComponent)之前执行

      【讨论】:

        【解决方案4】:

        我想根据之前的讨论提出另一种解决方案:

        var ribbonResourceManager = new RibbonResourceManager();
        
        var translatorType = typeof(RibbonContextMenu)
            .Assembly.GetType("Microsoft.Windows.Controls.SR");
        var resourceManagerField = translatorType.GetField("_resourceManager", 
            BindingFlags.NonPublic | BindingFlags.Static);
        resourceManagerField.SetValue(null, ribbonResourceManager);
        

        其中RibbonReourceManager 是基本 ResourceManager 的继承者,具有重写的 GetString 方法。 RibbonResourceManager 应该返回下面列出的所有字符串:

        • "RibbonQuickAccessToolBar_OverflowButtonToolTip"
        • “QATKeyTipCharacters”
        • “RibbonContextMenu_AddToQAT”
        • “RibbonContextMenu_AddGalleryToQAT”
        • “RibbonContextMenu_RemoveFromQAT”
        • “RibbonContextMenu_ShowQATAbove”
        • “RibbonContextMenu_ShowQATBelow”
        • “RibbonContextMenu_MaximizeTheRibbon”
        • “RibbonContextMenu_MinimizeTheRibbon”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          相关资源
          最近更新 更多