0

我有一个 WindowsForm 应用程序,所有文本(在表单标签/按钮/其他控件上)都是用挪威语编写的。我想使用本地化转换所有英文文本。Devexpress中有什么方法可以将所有文本转换为英文,而无需手动将每个文本的含义写入资源文件中?例如:- 在附件中,“Brukernavn”被硬编码在标签上。我想将其自动转换为英文而不在 English-ResourceFile 中分配其值。Devexpress 本地化的方法应该是什么?

在此处输入图像描述

4

1 回答 1

0

我不知道有任何 Devexpress 方法可以做到这一点。一个好的解决方案是实际完成为英语构建本地化文件的工作,其工作方式如下。

  • 将 InternationlisationLayer 添加到您的应用程序。
  • 该层搜索应用程序以找到您可能想要翻译的所有控件。
  • 找到所有控件后,您必须将它们的文本值与翻译后的文本相匹配。
  • 找到匹配的英文文本后,您必须替换这些控件上的 Text 属性。

如果您想避免构建适当的本地化系统,下面将解释一个更简单的解决方案。

  • 制作一个类型列表,并在其中填写您要翻译的所有控制文本。
  • 翻译字符串并添加它们的格式,以便您拥有一个类型的字典(其中 Key 是原始文本,Value 是翻译后的文本)。
  • 在应用程序开始获取您要翻译的所有控件的列表并执行以下操作:

        public static IEnumerable<System.Windows.Forms.Control> GetAllControlsOfType(this      System.Windows.Forms.Control control, Type type)
        {
            var controls = control.Controls.Cast<System.Windows.Forms.Control>();
    
            return controls.SelectMany(ctrl => GetAllControlsOfType(ctrl, type))
             .Concat(controls)
             .Where(c => c.GetType() == type);
        }
    
        public void DoTranslation()
        {
            var ctrls = this.GetAllControlsOfTypes(new List<Type>() { typeof(Label), typeof(Button) });
            foreach (var ctr in ctrls)
            {
                var element = dict.FirstOrDefault(i => i.Key == ctr.Text);
                ctr.Text = element.Value;
            }
        }
    
于 2019-10-24T09:23:00.797 回答