提供一个c# winform的多语言框架源码,采用json格式作为语言包,使用简单易于管理加载且不卡UI,支持“语言分级”管理

news2024/11/18 11:24:29

提供一个c# winform的多语言框架源码,采用json格式作为语言包,不使用resx资源,当然本质一样的,你也可以改为resx

一、先看下测试界面

演示了基本的功能:切换语言,如何加载语言,如何分级加载语言

二、看下测试界面的代码

如上图所示,代码编写步骤:
1.依赖注入载入语言管理器

        private readonly ILanguageManager _languageManager;
        public MainForm(ILanguageManager languageManager)
        {
            _languageManager = languageManager;

            InitializeComponent();

            languageManager.LanguageChanged += (s, e) => Localize();
        }


2.加入语言变更事件

        private readonly ILanguageManager _languageManager;
        public MainForm(ILanguageManager languageManager)
        {
            _languageManager = languageManager;

            InitializeComponent();

            languageManager.LanguageChanged += (s, e) => Localize();
        }
        private void Localize()
        {
            ButtonChangeLanguage.Text = _languageManager.CurrentLanguage["Buttons.ButtonMount"];
            FrmCallRepairText.Text = _languageManager.CurrentLanguage["Labels.mazhiyuan"];

            //测试多级
            if (PauseButton.Text == _languageManager.CurrentLanguage["DataSyncRecordsControl.PauseButton.Pause"])
            {
                PauseButton.Text = _languageManager.CurrentLanguage["DataSyncRecordsControl.PauseButton.Resume"];
            }
            else
            {
                PauseButton.Text = _languageManager.CurrentLanguage["DataSyncRecordsControl.PauseButton.Pause"];
            }
        }

是的,就是这么简单易用。

三、语言包的制定

如图所示,语言包文件默认是自动读取“Languages"中所有.json文件。
当然,您可以在初始化的时候改变这个配置。代码在如下图的地方修改

四、关于.json文件 的内容

如上图,以简体中文zh-CN.json为例子:
LanguageName:语言名称
LanguageCode:语言唯一编码
Order:排序,类型是float,支持小数点。值越小,就排在越前面
Default:是否默认,当为true的时候,那么打开winform程序,就自动使用这个配置的语言包
Translations:语言翻译。特色是支持多级分类 ,这样有助于你按层级结构进行语言整理。访问的时候,使用小数点进行间隔,如下图所示:

五、核心接口

ILanguageManager是核心接口,所有访问均从此入口进去。
具体接口内容,请看截图。

具体的代码实现就不多说了。提供了源码,请自行下载。

如上图,源码位置在Xejen.Common目录下。


源码下载:
https://gitee.com/mazhiyuan1981/xejen-open.git

祝您用餐愉快。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Debezium+Kafka:Oracle 11g 数据实时同步至 DolphinDB 解决方案

随着越来越多用户使用 DolphinDB,各式各样的应用场景对 DolphinDB 的数据接入提出了不同的要求。部分用户需要将 Oracle 11g 的数据实时同步到 DolphinDB 中来,以满足在 DolphinDB 中实时使用数据的需求。本篇教程将介绍使用 Debezium 来实时捕获和发布 …

网络层协议——IP协议

1. 网络层 在学习TCP时,我们学习了TCP保证的是能将一个数据可靠的传输到另一个主机上。主要是数据的可靠传输。而网络层和数据链路层则是帮助我们如何将数据传输到另一台主机上。 我们在应用层给对方发数据时,数据并不是直接传输给对方的,而…

如何应对EI会议中的突发情况?

在参加EI会议时,难免会遇到一些突发情况,以下是几种常见的突发情况及应对策略: 突发情况及应对策略 1. 技术故障 投影设备故障:提前将演示文稿上传到会议主办方指定的平台,或带上多个版本(如USB驱动器和云…

网络采集受限?如何解决指纹识别、IP封禁、验证码、账号多登等问题

网页采集是什么 网页采集,也常被称作网络采集、网络数据抓取,是一种通过自动化工具从网站上获取信息的技术。这些技术通过访问网页,解析页面上的内容,并提取出有价值的数据,如文本、图片、链接等。 网页采集通常用于…

大学计算机专业必看:大学编程相关的比赛或者证书,真正有用的是哪些?

前言 大学期间,会有各种各样的编程赛事,但是你知道真正对自己未来就业有帮助的比赛证书有帮助的是哪些吗? 有些小伙伴来面试时,会咔咔亮出一大堆的证,看起来挺唬人。 但真的有含金量吗?真的能为你的简历增…

A2B V2.0协议学习笔记(非正式版本)

一、说明 A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。 A2B V2.0总线相对V1.0主要变化点: 速率提升,高达98.304Mbps,全双工模式 编码方式,由之前的曼彻斯特编码变为QPSK(正交相移键控)编码,每个符合2bit数据,因此…

计算机网络之应用层知识点总结

6.1 网络应用模型 (1)应用层概述 (2)网络应用模型的介绍 客户/服务器(C/S)模型 P2P模型 6.2 域名解析系统DNS (1)DNS系统介绍 (2)域名 (3&#…

Java时间工具类(Date和LocalDateTime)

Date package com.qiangesoft.utils.date;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 日期工具类** author lq* date 2024-05-23*/ public class DateUtil {public static final String[] C…

同一个类中方法调用,导致@Transactional失效

1.背景 查了一下Spring文档,就是上面这段话所说的情况。 2.Spring官方文档有这么一段话 https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#transaction-declarative In proxy mode (which is the default), only external …

Docker save load 镜像 docker手动上传导入镜像

docker手动上传导入镜像 因为一些服务器网络限制,导致拉取某些镜像的时候非常慢,可以使用手动的方式导入镜像 1、将镜像归档为tar文件 如果一台服务器里已经存在某个镜像,可以通过docker save 命令 把镜像打成tar包 docker save 命令用于将…

【Vue】Vue2使用ElementUI

目录 Element UI介绍特点Vue2使用Element安装引入ElementUI组件库 使用ElementUI用户注册列表展示其他 mint-ui介绍特点安装组件引入组件Mint-ui相关组件 Element UI 介绍 官网(基于 Vue 2.x ):https://element.eleme.cn/#/zh-CN ElementUI 是一个基于 Vue.js 的桌面端组件库…

K8S认证|CKA题库+答案| 11. 创建PVC

11、创建PVC 您必须在以下Cluster/Node上完成此考题: Cluster Master node Worker node ok8s master …

【加密与解密(第四版)】第二十二章笔记

第二十二章 补丁技术 补丁:文件补丁(修改文件本身的某个数据)和内存补丁(对正在运行的程序的数据进行修改,以达到某种效果) 22.1 文件补丁 文件补丁直接修改可执行文件或某功能模块的二进制代码。 22.2 内…

GPTS 精选:突破效率瓶颈,轻松领先一步别人下班

文章目录 优秀的GPTS推荐数据分析图像设计各种图表/流程图/序列图/思维导图联网搜索数学建模编程专属助手Python助手万能代码助手(Copilot)论文降重(重述/降重)文献搜索(Scholar AI,Scholar GPT&#xff09…

ssm/springoot养老院问诊服务预约系统_96316老年人服务系统

2.管理员: (1)登入注册页面:管理员进行操作时需要是已注册登入的 (2)权限管理:管理员登入后可以运用权限进行相应的操作管理。 (3)用户管理:对用户进行删除、…

C盘磁盘空间不够用,怎样将d盘的空间划分给c盘?

C盘磁盘空间不够用,怎样将d盘的空间划分给c盘? 背景:win10系统下。C盘原有50G,如今只剩下8G,已经捉襟见肘了,想从D盘,割100G给C盘,以后软件能直接装C盘了。操作步骤如下&#xff1a…

如何解读伊朗发布的直升机事故调查报告?一般事故调查报告应怎么写?

如何解读伊朗发布的直升机事故调查报告?一般事故调查报告应怎么写? 据央视新闻客户端消息:当地时间5月23日,伊朗武装部队总参谋部发布首份已故总统莱希及其随行人员乘坐的直升机事故调查报告。以下是#李秘书讲写作#对报告内容的解…

vue3+vite解决项目打包后本地图片等资源找不到的问题

1.在vite.config.js里面做如下配置 import { defineConfig } from vite import vue from vitejs/plugin-vueexport default defineConfig({base: ./, // 打包的静态资源引用路径plugins: [vue()], // 放插件用的resolve: {alias: {: /src // 配置/提示符}}, })上述配置主要就是…

【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测

学习《OpenCV应用开发:入门、进阶与工程化实践》一书,学会本文所有技能就这么简单! 做真正的OpenCV开发者,从入门到入职,一步到位! 前言 我写这篇文章之前,我搜索整个网络文章跟问各种语言大模…

【Nuxt系列文章】Nuxt3如何更优雅的使用ESLint?

前言 大家好,我是刘明,十年创业老兵,开源技术爱好者。 之前我写了一些关于Nuxt3的技术文章,有些同学很感兴趣。这里做个汇总,大家可以直接点击链接查看。 【Nuxt系列文章】Nuxt3.6带来哪些新特性? 【Nuxt…