窗体本地化:
设置窗体属性Localizable为True,然后设置上面的Lanaguage为你需要的语言,这时在对应的窗体文件下会生成如下文件
调用方法:
在窗体的 InitializeComponent(); 前加入如下语句
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-GB"); //括号中的字符参考生成的资源文件中的后缀
这时窗体将以固定的英语显示
如何在运行时进行切换,参考如下代码
private void btTrans_Click(object sender, EventArgs e)
{
// 中英文切换
if (btTrans.Text.ToUpper() == "EN")
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-GB");
}
else
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh-CN");
}
System.ComponentModel.ComponentResourceManager res = new ComponentResourceManager(typeof(FrmMain));
ApplyResource(res, this);
res.ApplyResources(this, "$this");
}
/// <summary>
/// 获取窗体资源信息。
/// </summary>
/// <param name="form">需要获取的资源所在的最顶层控件(如:窗体,自定义控件)。</param>
/// <param name="frm">需要获取的资源窗体或者容器控件。</param>
/// <returns>返回资源字符串。</returns>
private void ApplyResource(System.ComponentModel.ComponentResourceManager res, Control frm)
{
try
{
foreach (Control ctrl in frm.Controls)
{
res.ApplyResources(ctrl, ctrl.Name);
if (ctrl is DataGridView)
{ //datagridview
DataGridView dgv = (DataGridView)ctrl;
foreach (DataGridViewColumn dgvcolname in dgv.Columns)
{
res.ApplyResources(dgvcolname, dgvcolname.Name);
}
}
//else if (ctrl is MenuStrip)
//{//菜单
// MenuStrip mstrip = (MenuStrip)ctrl;
// foreach (ToolStripMenuItem subItem in mstrip.Items)
// {
// res.ApplyResources(subItem, subItem.Name);
// }
//}
//遍历容器
if (ctrl is Panel || ctrl is PictureBox || ctrl is GroupBox ||
ctrl is TabControl || ctrl is TabPage || ctrl is SplitContainer)
{
ApplyResource(res, ctrl);
}
}
}
catch
{
}
}
窗体提示信息本地化:
添加资源文件,生成如下文件
文件中内容如下
调用方法:
if (m_LanagerString == "en-GB")
m_LanagerManager = new ResourceManager("Synchronism.FormResource.FrmMain_en-GB", this.GetType().Assembly);
else
m_LanagerManager = new ResourceManager("Synchronism.FormResource.FrmMain", this.GetType().Assembly);
m_LanagerManager.GetString("FrmMain_008")