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>
/// 当前项目文件夹Debug\Language\参数文件夹
/// </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]);}elseresources[key] = dict[key];}else if(transType == TransType.en_cn){// 英文转中文var value = dict[key];if (!resources.ContainsKey(value)){resources.Add(value, key);}elseresources[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()];}elseNewItems[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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/250180.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用通俗易懂的方式讲解:一文详解大模型 RAG 模块

文章目录 什么是 RAG&#xff1f;技术交流&资料通俗易懂讲解大模型系列 RAG模块化什么是模块化RAG&#xff1f; 索引模块块优化滑动窗口从小到大元数据附加 结构化组织层次化索引知识图谱文档组织 预检索模块查询扩展多查询子查询CoVe 查询转换重写HyDE 查询路由元数据路由…

Java对象属性设置方式

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 对象属性设置方式 直接赋值 SystemMappingCode systemMappingCode new SystemMappingCode();systemMappingCode.setCodeResp(request.getCodeResp());systemMapping…

面试八股文(2)

文章目录 1.ArrayList和LinkedList区别2.HashMap和HashTable区别3.线程的创建方式4.Java中异常处理5.Java序列化中某些字段不想进行序列化&#xff1f;6.Java序列化7.静态方法和实例方法8.List、Set、Map三者区别9.ArrayList和Vector区别10.HashMap和HashSet区别 1.ArrayList和…

flask基于Python的期货交易模拟系统的django-afl61-vue

期货交易模拟系统是一个便于用户在线查看期货投资、取消投资、风险控制、账户资金、持仓资金等&#xff0c;管理员进行管理的平台。因此本文主要论述了系统开发的过程和实现的功能&#xff0c;结合Web技术来实现的期货交易模拟系统。本系统以软件工程理论为开发基础&#xff0c…

Linux系统Shell脚本-----------正则表达式 文本三剑客之---------grep、 sed

一、正则表达式 1.前言 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板&…

【GitHub项目推荐--ChatGPT开源项目】【转载】

Auto-GPT Auto-GPT 是一个实验性的开源项目&#xff0c;基于 GPT-4。你给出 Auto-GPT 一个的任务&#xff0c;它不会立即输出答案&#xff0c;而会先自己通过多轮对话来琢磨、验证、决策&#xff0c;从而自己找出一条达成目标的路&#xff0c;整个过程完全不需要人类插手&…

Facebook的社交影响力:用户行为解析与趋势

在当今数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为全球最大的社交平台之一&#xff0c;其社交影响力愈发显著。本文将深入分析Facebook的社交影响力&#xff0c;解析用户行为&#xff0c;同时探讨当前和未来的社交趋势。 社…

数据可视化 pycharts实现时间数据可视化

自用版 数据格式为&#xff1a; 运行效果为&#xff1a; from pyecharts import options as opts from pyecharts.charts import Polar, Page import csv filename "./hot-dog-places.csv" data_x [] data_y [] with open(filename) as f:reader csv.reade…

Python 中常用图像数据结构

&#xff08;原文&#xff1a;https://blog.iyatt.com/?p13222 &#xff09; 1 测试环境 Python 3.12.1 numpy 1.26.3 opencv-python 4.9.0.80 pillow 10.2.0 matplotlib 3.8.2 注&#xff1a; 基于 2022.1.16 和 2022.4.9 的三篇博文再次验证并重写&#xff0c;原文已删…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

网络时间协议NTP工作模式

单播服务器/客户端模式 单播服务器/客户端模式运行在同步子网中层数较高层上。这种模式下,需要预先知道服务器的IP地址。 客户端:运行在客户端模式的主机(简称客户端)定期向服务器端发送报文,报文中的Mode字段设置为3(客户端模式)。当客户端接收到应答报文时,客户端会…

编程流程图

对于复杂流程&#xff0c;我做开发之前一般会 先画一下流程图。特别是多个部门有交叉的情况下&#xff1a; processOn&#xff1a; 这个是我之前 一直的选择&#xff0c;他可以画上面的这些&#xff0c;流程图&#xff0c;网页操作&#xff0c;但是他不是免费的&#xff0c;查过…

【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2023年全球气象站…

【微信小程序开发】小程序的事件处理和交互逻辑(最详细)

前言 在微信小程序中&#xff0c;事件处理和交互逻辑是开发过程中非常重要的环节&#xff0c;它们直接影响到用户体验和功能实现。今天为大家继续详解小程序的事件处理和交互逻辑 文章目录 前言为什么要学习事件处理和交互逻辑&#xff1f;事件处理基础事件类型和触发条件事件绑…

python3.8 安装缺少ssl、_ctypes模块解决办法

问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错&#xff1a; Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…

Vue3_基础使用_1

这节主要介绍&#xff1a; vue2与vue3的区别&#xff0c;创建响应式的数据&#xff0c;setup语法糖的使用&#xff0c;watch监听&#xff0c;及vue3创建项目。 vue2的选项式与vue3的组合式区别&#xff1a; 选项式&#xff1a;vue2中数据与方法计算属性等等&#xff0c;针对…

Java学习-面向对象-继承

继承是什么&#xff1f; 示例&#xff1a; packagejava_jicheng_demo1; publicclassA{ //创建公开的成员变量&#xff0c;方法 publicStringnane; publicintage; publicvoidprint1(){ System.out.println("666"); } //创建私有的成员变量&#xff0c;方法 privateStr…

#《AI中文版》V3 第 3 章 知情搜索

参考链接&#xff1a; [1] 开源内容&#xff1a;https://github.com/siyuxin/AI-3rd-edition-notes [2] Kimi Chat官网链接 正文笔记 P90 针对 大型问题。 知情搜索&#xff08;informed search&#xff0c;也称有信息搜索&#xff09;&#xff1a;利用启发式方法&#xff0c…

MobPush:Android SDK 集成指南

开发工具&#xff1a;Android Studio 集成方式&#xff1a;Gradle在线集成 安卓版本支持&#xff1a;minSdkVersion 19 集成前准备 注册账号 使用PushSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;…

基于python+django,我开发了一款药店信息管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;药品管理、分类管理、顾客管理、用户管理、日志管理、系统信息模块。 代码结构 server目录是后端代码web目录是前端代码 部署运行…