Winform 多语言化快速解析替换工具-1分钟一个界面

news2024/11/27 21:07:38

随着业务的扩展,有的软件有多语言化的需求。那么如果软件已经很多写死的文字内容如何快速进行语言化替换呢,一个一个去改工作量太大。

于是开发了个小工具用来替换现有内容并生成语音包,原理就是采用正则表达式进行匹配控件关键字以及中文进行多语言组装解析。

关键正则表达式

      string pattern = @"this\.(\w+)\.Text = ""([^""]*[\u4e00-\u9fa5]+[^""]*)""";

   string pattern = @"(?<!this, )(?<!@)\""[^\""@\n]*[\u4e00-\u9fa5]+[^\""@\n]*\""(?!@)";

语言包组装

try
            {
                // 根据行列进行 XML生成
                var lines = TxtLanguage.Lines.ToList();
                List<string> xmlList = new List<string>();
                xmlList.Add($@"!{TXTCH.Text}
            <Form Name = ""{TxtFormName.Text}"">
            <Item 属性=""Text""  CN = ""{TXTCH.Text}""   EN = ""{TXTENG.Text}"" RU ="""" />");
                lines.ForEach(line =>
                {
                    var lineArr = line.Split("\t");
                    if (lineArr.Length > 2)
                    {
                        // 第一位是表单名称
                        // 第二位是控件名称
                        // 第三位是中文
                        // 第四位是英文
                        // 第五位是墨西哥 。。。
                        var controlName = lineArr[1];
                        var chinese = lineArr[2];
                        var eng = lineArr.Length > 3 ? lineArr[3] : "";
                        var es = lineArr.Length > 4 ? lineArr[4] : "";
                        string controlText = $@"<Control Name=""{controlName}"">
                            <Item 属性=""Text"" CN = ""{chinese}""  EN = ""{eng}"" RU =""{es}""/>
                            <Item 属性=""Font"" CN = ""9""  EN = ""9"" RU =""9"" />
                        </Control>";
                        xmlList.Add(controlText);
                    }
                });
                xmlList.Add("</Form>");

                TxtXml.Lines = xmlList.ToArray();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

!test
            <Form Name = "test">
            <Item 属性="Text"  CN = "test"   EN = "test" RU ="" />
<Control Name="请输入表单name">
                            <Item 属性="Text" CN = "请输入表单name"  EN = "Please enter the form name " RU ="Введите формуname "/>
                            <Item 属性="Font" CN = "9"  EN = "9" RU ="9" />
                        </Control>
<Control Name="$1MultiLanguage.GetInstance().SelectLanguage(this);//界面语言">
                            <Item 属性="Text" CN = "$1MultiLanguage.GetInstance().SelectLanguage(this);//界面语言"  EN = "$1MultiLanguage.GetInstance (). SelectLanguage (this); //Interface language " RU ="$1MultiLanguage. GetInstance(). SelectLanguage (this); //язык интерфейса "/>
                            <Item 属性="Font" CN = "9"  EN = "9" RU ="9" />
                        </Control>
<Control Name="翻译异常">
                            <Item 属性="Text" CN = "翻译异常"  EN = "Translation anomaly " RU ="аномалия перевода "/>
                            <Item 属性="Font" CN = "9"  EN = "9" RU ="9" />
                        </Control>
<Control Name="控件名称: ">
                            <Item 属性="Text" CN = "控件名称: "  EN = "Control name: " RU ="Имя элемента управления: "/>
                            <Item 属性="Font" CN = "9"  EN = "9" RU ="9" />
                        </Control>
<Control Name="匹配内容: ">
                            <Item 属性="Text" CN = "匹配内容: "  EN = "Matching content: " RU ="Сопоставление содержимого: "/>
                            <Item 属性="Font" CN = "9"  EN = "9" RU ="9" />
                        </Control>
</Form>

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

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

相关文章

使用MLC-LLM将RWKV 3B模型跑在Android手机上

0x0. 前言 这篇文章主要是填一下 MLC-LLM 部署RWKV World系列模型实战&#xff08;3B模型Mac M2解码可达26tokens/s&#xff09; 这里留下来的坑&#xff0c;这篇文章里面介绍了如何使用 MLC-LLM 在A100/Mac M2上部署 RWKV 模型。但是探索在Android端部署一个RWKV对话模型的ap…

宇信科技:强势行业加速融入AIGC,同时做深做细

【科技明说 &#xff5c; 重磅专题】 大家可能没有想到&#xff0c;一向对外低调行事的宇信科技&#xff0c;在AIGC方面2023年就已经训练出了适配金融场景的垂直模型&#xff0c;并应用到了各产品线上&#xff0c;同时结合通用大模型预研了宇信金融系统编程大模型。宇信金融系…

IOC课程整理-15 Spring 类型转换

1. Spring 类型转换的实现 2. 使用场景 3. 基于 JavaBeans 接口的类型转换 4. Spring 內建 PropertyEditor 扩展 5. 自定义 PropertyEditor 扩展 6. Spring PropertyEditor 的设计缺陷 7. Spring 3 通用类型转换接口 8. Spring 內建类型转换器 9. Converter 接口的局限性 10. G…

Azure - 机器学习:使用 Apache Spark 进行交互式数据整理

目录 本文内容先决条件使用 Apache Spark 进行交互式数据整理Azure 机器学习笔记本中的无服务器 Spark 计算从 Azure Data Lake Storage (ADLS) Gen 2 导入和整理数据从 Azure Blob 存储导入和处理数据从 Azure 机器学习数据存储导入和整理数据 关注TechLead&#xff0c;分享AI…

深入理解Linux网络笔记(五):深度理解本机网络IO

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 4、深度理解本机网络IO 1&#xff09;、跨机网络通信过程 …

快速排序——及其改进

hoare版本&#xff08;原始版本&#xff09;&#xff1a; 思想&#xff1a;树的遍历思想&#xff0c;先把数组第一个数作为KEY,然后left从左到右&#xff0c;right从右到左一起走&#xff0c;当left找到比key大的值时停下来&#xff0c;当right找到比key小的值时停下来&#xf…

通讯网关软件030——利用CommGate X2Modbus实现Modbus RTU访问Mysql服务器

本文介绍利用CommGate X2Modbus实现Modbus RTU访问Mysql数据库。CommGate X2MODBUS是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现上位机通过Modbus RTU来获取Mysql数据库的数据。 【解…

IOC课程整理-16

1. Java 泛型基础 Java中的泛型擦除&#xff08;Type Erasure&#xff09;是Java编译器为了兼容之前的非泛型代码而采用的一种机制。在编译过程中&#xff0c;Java编译器会将泛型类型转换为原始类型&#xff0c;并在必要时插入强制类型转换。 泛型擦除有以下几个主要特点&…

深度学习_1 介绍;安装环境

深度学习 学习自李沐老师的课程。笔记主要以总结老师所讲解的内容以及我个人的想法为主&#xff0c;侵删&#xff01; 课程链接&#xff1a;课程安排 - 动手学深度学习课程 (d2l.ai) 介绍 AI地图&#xff1a; 我们以前写的非 AI 类程序基本都是人自己去想会遇到什么样的问题…

【PyQt学习篇 · ③】:QObject - 神奇的对象管理工具

文章目录 QObject类型判定常用的API应用场景&#xff1a;过滤筛选控件 QObject定时器常用API应用场景 QObject类型判定 常用的API isWidgetType()方法&#xff1a; 使用方式&#xff1a;obj.isWidgetType()作用&#xff1a;判断一个对象是否为QWidget及其子类的实例。QWidget…

4.5 final修饰符

在Java中&#xff0c;final修饰符可以修饰类、属性和方法&#xff0c;final有“最终”、“不可更改”的含义&#xff0c;所以在使用final关键字时需要注意以下几点&#xff1a; 使用final修饰类&#xff0c;则该类就为最终类&#xff0c;最终类不能被继承。 使用final修饰方法…

C++----模板进阶

文章目录 非类型模板参数STL知识补充 类模板的特化函数模板特化类模板特化偏特化 模板的分离编译模板总结 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参…

Vue性能优化:加速你的应用

目录 1. 使用虚拟DOM 2. 合理使用计算属性和侦听器 3. 懒加载组件 4. 合理使用v-if和v-show 5. 使用Key管理列表渲染 6. 避免不必要的Watcher 7. 缓存响应式数据 8. 使用异步组件 9. 使用Webpack进行代码优化 10. 监控性能并进行优化 Vue.js是一款流行的JavaScript框…

东软集团:看似低调,却有了19年的AI坚持

【科技明说 &#xff5c; 重磅专题】 在AI领域的专注与研究&#xff0c;东软集团是一个低调的存在。 可能很多人不太了解东软集团对于AI的专心与专注以及专业。三专可以简单概括东软集团的AI雄心壮志。 专注在于&#xff0c;早在2004年&#xff0c;东软就开始启动人工智能技…

【Apache Flink】流式分析的多种应用场景

文章目录 0. 前言1. 数据处理架构的演进2. 传统数据处理架构3. 事务型处理4. 分析型处理用于数据分析的传统数据仓架构 状态化流处理5. 事件驱动型应用什么是事件驱动型应用&#xff1f; 6. 数据管道什么是数据管道&#xff1f;Flink 如何支持数据管道应用&#xff1f;典型的数…

二叉树三种遍历的递归与非递归写法

目录 ​编辑 一&#xff0c;前序遍历 题目接口&#xff1a; 递归解法&#xff1a; 非递归解法&#xff1a; 二&#xff0c;中序遍历 题目接口&#xff1a; 递归解法&#xff1a; 非递归写法&#xff1a; 三&#xff0c;后序遍历 题目接口&#xff1a; 递归解法&…

IOC课程整理-17 Spring事件

1. Java 事件/监听器编程模型 2. 面向接口的事件/监听器设计模式 3. 面向注解的事件/监听器设计模式 4. Spring 标准事件-ApplicationEvent 5. 基于接口的 Spring 事件监听器 6. 基于注解的 Spring 事件监听器 7. 注册 Spring ApplicationListener 8. Spring 事件发布器 9. Spr…

基于VectorGrid加载GeoServer发布的矢量瓦片实例

目录 前言 一、关于VectorGrid 1、开源地址 2、本地示例 二、与LeafLet集成 1、新建html页面 2、地图初始化 3、pbf瓦片地址配置 4、pbf初始化 三、GeoServer跨域问题 1、web.xml配置 2、重启tomcat 总结 前言 回望10月&#xff0c;发生了一些变动&#xff0c;面向未…

状态机图和活动图

在面向对象软件分析过程中&#xff0c;状态机图和活动图用于建立软件的动态模型&#xff0c;主要描述系统随时间变化的行为。 1.状态图 1.1概念 状态图用来描述对象状态和事件之间的关系&#xff0c;强调一个实体基于事件反应的动态行为。状态图适合用于表述在不同用例之间的…

C语言#error和#line

C语言#error和#line #error #error用于生成一个编译错误消息&#xff0c;并停止编译 示例&#xff1a; 随便找了一个工程测试下#error 看图中我圈起来的部分&#xff0c;编译器提示warning和error。看我的程序如果没有定义TEST_#ERROR这个宏&#xff0c;编译器会报错You di…