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

{

 

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM