在winform中的窗体中直接切换语言
创建新的项目后,在窗体中添加控件
设置中英文资源
先将Form1窗体中的属性Locallizable设置为True。
然后设置form1属性中的Language为中文,设置完成后,将所有控件的属性的Text值写成中文名。
然后设置form1属性中的Language为英文,设置完成后,将所有控件的属性的Text值写成英文名。
设置完成后,会形成两个资源文件,zh代表中文,en代表英文。
Form1.zh.resx文件里的内容
Form1.en.resx文件里的内容
控件中英文资源设置完成后,写代码。
使用按键切换中英文语言代码
//添加命名空间
using System.Threading;
using System.Windows.Forms;
namespace language_change
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//组件资源管理器
ComponentResourceManager resource = new ComponentResourceManager(typeof(Form1));
private void btn_chinese_Click(object sender, EventArgs e)
{
//Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("");
ApplyResource();
}
private void btn_english_Click(object sender, EventArgs e)
{
//Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
ApplyResource();
}
//应用到每个控件上
void ApplyResource()
{
foreach (Control item in this.Controls)
{//针对每个控件,需要传入对象和对象名称
resource.ApplyResources(item, item.Name);
}
button1.Text= a ? resource.GetString("打开状态"): resource.GetString("关闭状态");
}
//阀门开启状态
bool a = false;
private void button1_Click(object sender, EventArgs e)
{
//阀门打开,给他关闭
if(a)
{//组件资源管理器
a = false;
button1.Text = resource.GetString("关闭状态");
}
else
{
a = true;
button1.Text = resource.GetString("打开状态");
}
}
}
}
上面代码是包括了按键状态切换的,如果只是想要改变控件中英文,可以直接使用下面的代码,忽略按键状态。
namespace language_change
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//组件资源管理器
ComponentResourceManager resource = new ComponentResourceManager(typeof(Form1));
private void btn_chinese_Click(object sender, EventArgs e)
{
//Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("");
ApplyResource();
}
private void btn_english_Click(object sender, EventArgs e)
{
//Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
ApplyResource();
}
//应用到每个控件上
void ApplyResource()
{
foreach (Control item in this.Controls)
{//针对每个控件,需要传入对象和对象名称
resource.ApplyResources(item, item.Name);
}
}
}
}
使用下拉框切换中英文语言代码
namespace language_change
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//组件资源管理器
ComponentResourceManager resource = new ComponentResourceManager(typeof(Form1));
//应用到每个控件上
void ApplyResource()
{
foreach (Control item in this.Controls)
{//针对每个控件,需要传入对象和对象名称
resource.ApplyResources(item, item.Name);
}
button1.Text= a ? resource.GetString("打开状态"): resource.GetString("关闭状态");
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if(cbx_change.SelectedIndex == 0)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh");
ApplyResource();
}
else
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
ApplyResource();
}
}
}
}
在这里,我的下拉框里面的内容,索引0是中文,索引1是英文。代码里直接使用的索引来判断的。也可以将下拉框内容转换成字符串进行判断。看个人习惯。
string selectedLanguage = comboBoxLanguage.SelectedItem.ToString();
if (selectedLanguage == "中文")
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh");
ApplyResource();
}
else if (selectedLanguage == "English")
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
ApplyResource();
}