本文介绍: C# winform 多语言(json)方式实现
前后对比
使用nuget json工具包
1.总体思路
创建对应的json字典对照表
{
"测试":"Test",
"语言":"Language",
"设置":"Set",
"中文(默认)":"Chinese (default)",
"英文":"English",
"标签测试":"Label Test",
"主界面-标题":"Main Title",
"组合框":"group box",
"选择框":"checkBox",
"单选按钮":"radioButton",
"列标题1":"ColumnHeader1",
"列标题2":"ColumnHeader2",
}
加载对应 json文件
/// <summary>
/// 当前项目文件夹DebugLanguage参数文件夹
/// </summary>
/// <param name="language">配置文件所在文件夹名</param>
public static void LoadLanguage(TransType transType, string language = "")
{
if (string.IsNullOrEmpty(language))
{
language = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
}
resources = new Dictionary<string, string>();
string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
string.Format("Language/{0}.json", language));
if (File.Exists(dir))
{
LoadFile(transType, dir);
}
}
/// <summary>
/// 配置文件加载
/// </summary>
/// <param name="path">配置文件绝对路径(包括文件本身)</param>
public static void LoadFile(TransType transType, string path)
{
var content = File.ReadAllText(path, Encoding.UTF8);
if (!string.IsNullOrEmpty(content))
{
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
foreach (string key in dict.Keys)
{
if(transType == TransType.cn_en)
{
// 中文转英文
if (!resources.ContainsKey(key))
{
resources.Add(key, dict[key]);
}
else
resources[key] = dict[key];
}
else if(transType == TransType.en_cn)
{
// 英文转中文
var value = dict[key];
if (!resources.ContainsKey(value))
{
resources.Add(value, key);
}
else
resources[value] = key;
}
}
}
}
设置窗口语言
/// <summary>
/// 遍历翻译 窗体或控件及其子控件
/// </summary>
/// <param name="control">需要翻译的控件或窗体</param>
public static void InitLanguage(Control control)
{
SetControlLanguage(control);
// 循环所有控件
foreach (Control ctrl in control.Controls)
{
InitLanguage(ctrl);
}
//工具栏 或者菜单动态构建窗体或者控件的时候,重新对子控件进行处理
control.ControlAdded += (sender, e) =>
{
InitLanguage(e.Control);
};
}
/// <summary>
/// 控件及子控件翻译
/// </summary>
/// <param name="control">需要翻译的控件</param>
public static void SetControlLanguage(Control control)
{
if (control is ComboBox)
{
// ComboBox 转换
ComboBox combox = control as ComboBox;
int curSelect = combox.SelectedIndex;
string[] NewItems = new string[combox.Items.Count];
for (int i = 0; i < combox.Items.Count; i++)
{
if (resources.ContainsKey(combox.Items[i].ToString()))
{
NewItems[i] = resources[combox.Items[i].ToString()];
}
else
NewItems[i] = combox.Items[i].ToString();
}
combox.Text = (resources.ContainsKey(combox.Text)) ? resources[combox.Text] : combox.Text;
combox.Items.Clear();
combox.Items.AddRange(NewItems);
combox.SelectedIndex = curSelect;
}
else if (control is TreeView)
{
//control is 其他控件或者特殊控件 如:TreeView
}
else if(control is ListView)
{
// ListView 标题修改
var listView = control as ListView;
for (int i = 0; i < listView.Columns.Count; i++)
{
string titleName = listView.Columns[i].Text.ToString();
if (resources.ContainsKey(titleName))
{
listView.Columns[i].Text = resources[titleName];
}
}
}
else
{
control.Text = (resources.ContainsKey(control.Text)) ? resources[control.Text] : control.Text;
}
}
完整代码包
链接:https://pan.baidu.com/s/1FXS5X4O5vBrKykgdSmAj3w
提取码:c7p0
原文地址:https://blog.csdn.net/weixin_45875105/article/details/135946247
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_66953.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。