最近在網上綜合了各種資料,寫了一個完整的切換語言助手類。
接口SetLanguage(string languageName,Form form)
可以對某個窗口進行語言切換。
languageName是語言的代碼。
目前可以支持窗口,菜單,工具欄,按鈕等。
但是還沒有找到比較好的,通用的listbox,combobox的方法。
希望兄弟們涌躍討論,能否找到一個解決listbox,combobox的方法。
主要思想:
循環設置所有的窗口控件,菜單和工具欄需要遞歸設置所有的items.
源代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
using System.Globalization;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
using System.Globalization;
namespace Hob.Toolbox.Classes
{
/// <summary>
/// 動態切換語言的助手類
/// 支持動態切換窗口,菜單及子項,工具欄及子項,其他控件屬性。
/// 2007.8.23
/// </summary>
public partial class LocalizeHelper:Component
{
#region 構造函數
public LocalizeHelper()
{
InitializeComponent();
}
{
/// <summary>
/// 動態切換語言的助手類
/// 支持動態切換窗口,菜單及子項,工具欄及子項,其他控件屬性。
/// 2007.8.23
/// </summary>
public partial class LocalizeHelper:Component
{
#region 構造函數
public LocalizeHelper()
{
InitializeComponent();
}
public LocalizeHelper(IContainer container)
{
container.Add(this);
InitializeComponent();
}
#endregion
{
container.Add(this);
InitializeComponent();
}
#endregion
/// <summary>
/// public method SetLanguage
/// </summary>
/// <param name="languageName"></param>
/// <param name="form"></param>
/// <returns></returns>
public bool SetLanguage(string languageName,Form form)
{
try
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(languageName);
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(languageName);
ComponentResourceManager resources = new ComponentResourceManager(form.GetType());
resources.ApplyResources(form, "$this");
ApplyResouce(form, resources);
return true;
}
catch
{
return false;
}
}
/// public method SetLanguage
/// </summary>
/// <param name="languageName"></param>
/// <param name="form"></param>
/// <returns></returns>
public bool SetLanguage(string languageName,Form form)
{
try
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(languageName);
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(languageName);
ComponentResourceManager resources = new ComponentResourceManager(form.GetType());
resources.ApplyResources(form, "$this");
ApplyResouce(form, resources);
return true;
}
catch
{
return false;
}
}
/// <summary>
/// set language for control and all child controls
/// </summary>
/// <param name="control"></param>
/// <param name="resources"></param>
private void ApplyResouce(Control control, ComponentResourceManager resources)
{
//for every control
foreach (Control c in control.Controls)
{
resources.ApplyResources(c, c.Name);
ApplyResouce(c, resources);
if (c is ToolStrip)
ApplyResouce(c as ToolStrip, resources);
}
}
/// set language for control and all child controls
/// </summary>
/// <param name="control"></param>
/// <param name="resources"></param>
private void ApplyResouce(Control control, ComponentResourceManager resources)
{
//for every control
foreach (Control c in control.Controls)
{
resources.ApplyResources(c, c.Name);
ApplyResouce(c, resources);
if (c is ToolStrip)
ApplyResouce(c as ToolStrip, resources);
}
}
/// <summary>
/// set language for toolstrip all child item
/// </summary>
/// <param name="toolstrip"></param>
/// <param name="resources"></param>
private void ApplyResouce(ToolStrip toolstrip, ComponentResourceManager resources)
{
if (toolstrip.Items.Count > 0)
{
foreach (ToolStripItem item in toolstrip.Items)
ApplyResouce(item, resources);
}
}
/// set language for toolstrip all child item
/// </summary>
/// <param name="toolstrip"></param>
/// <param name="resources"></param>
private void ApplyResouce(ToolStrip toolstrip, ComponentResourceManager resources)
{
if (toolstrip.Items.Count > 0)
{
foreach (ToolStripItem item in toolstrip.Items)
ApplyResouce(item, resources);
}
}
/// <summary>
/// set language for toolstripitem and all child items
/// </summary>
/// <param name="item"></param>
/// <param name="resources"></param>
private void ApplyResouce(ToolStripItem item, ComponentResourceManager resources)
{
resources.ApplyResources(item, item.Name);
if (item is ToolStripDropDownItem)
{
ToolStripDropDownItem ditem = item as ToolStripDropDownItem;
if (ditem.DropDownItems.Count > 0)
{
foreach(ToolStripItem sitem in ditem.DropDownItems)
ApplyResouce(sitem, resources);
}
}
}
}
}
/// set language for toolstripitem and all child items
/// </summary>
/// <param name="item"></param>
/// <param name="resources"></param>
private void ApplyResouce(ToolStripItem item, ComponentResourceManager resources)
{
resources.ApplyResources(item, item.Name);
if (item is ToolStripDropDownItem)
{
ToolStripDropDownItem ditem = item as ToolStripDropDownItem;
if (ditem.DropDownItems.Count > 0)
{
foreach(ToolStripItem sitem in ditem.DropDownItems)
ApplyResouce(sitem, resources);
}
}
}
}
}
整個工程代碼下載: