【问题标题】:Devexpress LocalizationDevexpress 本地化
【发布时间】:2020-02-20 11:14:39
【问题描述】:
我有一个 WindowsForm 应用程序,所有文本(在表单标签/按钮/其他控件上)都用挪威语编写。我想使用本地化转换所有英文文本。 Devexpress中有什么方法可以将所有文本转换为英文,而无需手动将每个文本的含义写入资源文件中?
例如:- 在附件中,“Brukernavn”被硬编码在标签上。我想将其自动转换为英文而不在 English-ResourceFile 中分配其值。 Devexpress 本地化的方法应该是什么?
【问题讨论】:
标签:
winforms
localization
devexpress
devexpress-windows-ui
satellite-assembly
【解决方案1】:
我不知道有任何 Devexpress 方法可以做到这一点。一个好的解决方案是实际完成构建英语本地化文件的工作,如下所示。
- 向您的应用程序添加一个国际化层。
- 这一层
搜索应用程序以找到您可能想要的所有控件
翻译。
- 找到所有控件后,您必须匹配它们
翻译文本的文本值。
- 找到匹配的英文后
文本,您将不得不替换这些控件上的 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;
}
}