Winform程序多语言切换
1.创建winform程序
第一个窗体
第二个窗体
2.新建类库 ConfigurationSettings
从我Demo中拷贝此类库下的所有类
3.配置app.config文件
<configuration>
<configSections>
<section name="StartUpConfiguration"
type="ConfigurationSettings.StartUpConfigSection, ConfigurationSettings" />
</configSections>
<StartUpConfiguration>
<Languages Default ="zh-CN" >
<add Name ="en-US"/>
<add Name ="zh-CN"/>
</Languages>
</StartUpConfiguration>
</configuration>
如果想每次登录程序都默认英文 Default =“en-US
4.新建类库 StringResources
新建两个资源文件,一个是用来存中文,一个是用来存英文
Resources.resx
Resources.en.resx
这个文件中都是定义的内部类,内部方法,双击两个文件,将访问修饰符全部修改为 public
5.为了方便多窗体调用,将方法封装
主项目下新建文件夹 Language,新建类 LanguageManager.cs,将代码从Demo中粘贴过来
为了方便引入命名空间,主项目把之前的两个类库添加引用
System.Resources.ResourceManager _rm 实例化对象
!!!!! 移动代码的时候一定要看好,第一个参数,看好你的中英文配置是否是在此项目下的资源文件中,必须是主项目名字
添加引用如下
using System.Configuration;
using ConfigurationSettings;
using LanguageConvert.Properties;
using System.Globalization;
using System.Threading;
using System.Resources;
6.主窗体,添加代码
给语言下拉菜单赋数据源
private void Form1_Load(object sender, EventArgs e)
{
//LanguageConvert
{
this.cbxLanguage.DataSource = LanguageManager.Nativevalue;
this.cbxLanguage.SelectedItem = new
CultureInfo(LanguageManager.strDefaultLanguage).NativeName;
}
}
语言下拉菜单,添加代码
private void cbxLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
string value = cbxLanguage.Text;
LanguageManager.ChangeLanguage(value);
this.Text = LanguageManager.GetByKey("mainForm");
this.lbl_language.Text = LanguageManager.GetByKey("m_lbl_language");
this.dgv.Columns["column1"].HeaderText =
LanguageManager.GetByKey("m_dgv_c1");
this.ts_btn.Text = LanguageManager.GetByKey("m_ts_btn");
}
7.Resources.resx Resources.en.resx 添加内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hikrhLWH-1644974419618)(en-resource://database/1268:1)]
8.LanguageConvert.Properties.Resources 添加配置
9.超大Bug
App.config文件中,自动生成了如下代码:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
如果上面这些都配置好了,运行报错
就是startup这个标签引起的,全部删除,就没有问题
10.下载链接
Demo下载链接: 百度云
提取码:44ry