private void Form1_Shown(object sender, EventArgs e)
{
//窗体加载并显示后,对窗体实现多语言处理
if (!this.DesignMode)
{
LanguageHelper.InitLanguage(this);
}
}
如果我们为每个窗体都需要添加这些代码,也是繁琐的事情,那么我们可以把这个处理逻辑,放到我们常规自定义的窗体基类里面(如BaseForm),那么我们就不需要任何额外的代码了。
所需的就是集成窗体基类即可,这也是我们一般开发都做的事情,通过继承使得我们的代码又省去了。
/// <summary>
/// 测试多语言的窗体界面
/// </summary>
public partial class Form1 : BaseForm
那么我们真正关注的就是我们前面介绍的逻辑代码实现了
LanguageHelper.InitLanguage(this);
这个辅助类,主要就是在窗体初始化后,遍历界面的所有类型控件,对控件进行相应的多语言处理。
/// <summary>
/// 对界面控件进行多语言的处理辅助类
/// </summary>
public class LanguageHelper
{
/// <summary>
/// 初始化语言
/// </summary>
public static void InitLanguage(Control control)
{
//如果没有资源,那么不必遍历控件,提高速度
if (!JsonLanguage.Default.HasResource)
return;
//使用递归的方式对控件及其子控件进行处理
SetControlLanguage(control);
foreach (Control ctrl in control.Controls)
{
InitLanguage(ctrl);
}
//工具栏或者菜单动态构建窗体或者控件的时候,重新对子控件进行处理
control.ControlAdded += (sender, e) =>
{
InitLanguage(e.Control);
};
}
通过递归的方式,我们可以对常规的如GridControl,工具栏、NavBar导航栏、菜单、按钮等资源进行统一的多语言处理,而这里面对于我们开发应用程序界面,都不需要额外的担心,极大的提高了效率。
下面是几个常规的界面,我们来体验下英文版本的界面效果。










