C# 多语言实时切换的实现

 

看了网上实现实时切换的方式,感觉真是累啊!  自己写一个吧!   自夸一句:简单,优雅,高效。 如果有更好的方式,可以跟我讲一声。

 

实现是其于C# 本身的本地化方式之上.....比如你已经在C# 上实现了二种语言,且无问题。

1. 语种管理器

 


public enum LanguageEnum
{
LanguageCN,
LanguageEN,
}


class ManageLanguage
{
public static ManageLanguage Instance = new ManageLanguage();

ArrayList objectList = new ArrayList();

/// <summary>
/// 注册FORM
/// </summary>
/// <param name="item"></param>
public void RegObject(FormBase item)
{
if (objectList.Contains(item) != true)
{
objectList.Add(item);
}
}

/// <summary>
/// 设置语言
/// </summary>
/// <param name="lg">语言种类</param>
public void SetLanguage(LanguageEnum lg)
{
switch (lg)
{
case LanguageEnum.LanguageCN:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
CallBackLanguage();
break;
case LanguageEnum.LanguageEN:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("EN");
CallBackLanguage();
break;
}
}

/// <summary>
/// 遍历注册过的FORM,切换语言
/// </summary>
void CallBackLanguage()
{
//遍历所有Form,以切换其语言
foreach (FormBase form in objectList)
{
form.Language();
}
}

 


}

2. 语种切换接口

 

public partial class FormBase : Form
{
public FormBase()
{
InitializeComponent();

ManageLanguage.Instance.RegObject(this);
}


/// <summary>
/// 语言切换的接口
/// </summary>
public virtual void Language()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(this.GetType());


ArrayList list = new ArrayList();
FindControls(list, this);

this.Text = resources.GetString("$this.Text");

foreach (Control ctl in list)
{
resources.ApplyResources(ctl, ctl.Name);
}
}

/// <summary>
/// 把可以本地化的控件放入LIST
/// </summary>
/// <param name="list"></param>
/// <param name="ctl"></param>
private void FindControls(ArrayList list, Control ctl)
{
//容器不可以本地化
if (ctl is ContainerControl)
{
// MessageBox.Show(ctl.Name);
}
else
{
list.Add(ctl);
}

if (ctl.HasChildren)
{
foreach (Control c in ctl.Controls)
{
if (c is Form)
{
}
else
{
FindControls(list, c);
}
}
}
}

 

}

 

 

3. 使用时,只需要继承就可以了

public partial class FormMain : FormBase, ICaseView

{

 

}

 

posted @ 2015-01-20 14:24  睡觉的虫  阅读(7193)  评论(1编辑  收藏  举报