今年.NET Conf China 2023技术大会,我给大家分享了

.NET应用国际化-AIGC智能翻译+代码生成的议题,今天整理成博客,分享给所有人。
随着疫情的消退,越来越多的企业开始向海外拓展,应用系统的国际化和本地化是一个巨大的技术挑战,我们今天重点探讨以下内容:
  1. .NET应用如何实现国际化?不仅仅包含资源文件和文本的替换,还有文本词条抽取、智能翻译、代码替换、本地化处理等各种场景。
  2. 基于Roslyn进行代码分析,查找中文文本、抽取词条,以及代码替换。
  3. 机器翻译与GPT的Battle,基于GPT4实现一个智能翻译服务。
  4. 彩蛋环节:如何使用Github Copilot自动生成代码和单元测试。
一、.NET应用如何实现国际化 
目前我们的充电服务平台包含16大子系统,上千个功能菜单,数十个数据库... 大部分应用基于.NET技术栈构建,都需要支持国际化&本地化。 如何快速、高效、准确地完成产品国际化&本地化改造是团队面临的一个巨大的挑战! 没有相关经验怎么办? 好在有了ChatGPT!!! 我们先问一下ChatGPT~ 

   总结:技术方案可行,但是有几个架构设计上的问题: 1. 重度依赖资源文件 2. 大型分布式部署,分发、管理成本很高、很复杂 3. 需要大范围扫描、改造代码 4. 翻译、校对工作量巨大 5. 无法批量、动态修改翻译文本。
   在ChatGPT基础上,发挥.NET技术栈的能力,创新设计了一个新的解决方案:
   抽象封装一个词条服务,根据线程上下文的CurtureInfo,动态获取对应的多语言文本 注:
   1.1 词条通常用于标识需要被翻译文本的唯一标识。

上图中: 词条类I18NTerm:用于存储词条数据 词条管理接口:用于词条的批量新增、修改 词条服务接口:支持按词条查询对应的翻译文本。

    2 基于Roslyn,解析代码中的中文,形成多语言词条,同时做代码替换 封装一个翻译服务,批量翻译词条

    再次找到ChatGPT问一问 Prompt:你是一个.NET资深开发工程师,全面掌握C#语言,请基于Roslyn技术实现一个服务,输入一个sln解决方案的路径,扫描各个类中的中文文字,统一替换为I18nTermService.GetText('词条ID') 

重新设计一下技术实现方案:

3. 机器翻译与GPT的Battle,基于GPT4实现一个智能翻译服务。

  基于Azure AI services 的 Translator实现机器翻译

        但是机器翻译的准确性怎么样?机器翻译有哪些问题

    尝试使用ChatGPT做专业翻译:先设计Prompt 请把以下词语列表翻译为英文 1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,每个单词一行 

      依旧不理想,继续修改Prompt
      Prompt:你是一个美国电动汽车充电服务运营商,精通中文和英文,请使用专业领域术语,把以下词语列表翻译为英文,1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,翻译时电站等同于充电站,充电终端等同于充电桩,终端也等同于充电桩,每个单词一行。

充电桩的专业翻译是 Charging point 需要一个专业术语表

      继续改进Prompt
      Prompt:你是一个美国电动汽车充电服务运营商,精通中文和英文,请使用以下格式的专业术语 {"充电站":"Charging station", "充电桩":"Charging point"},把以下词语列表翻译为英文,1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,翻译时电站等同于充电 站,充电终端等同于充电桩,终端也等同于充电桩,每个单词一行。

  翻译准确性提升了 我们继续改进,同时实现工程化
  Prompt:你是一个美国电动汽车充电服务运营商,精通中文和英文,请使用以下格式的专业术语 {"充电站":"Charging station", "充电桩":"Charging point"},把以下词语列表翻译为英文,1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,翻译时电站等同于充电站,充电终端等同于充电桩,终端也等同于充电桩,请以JSON格式返回,例如 {"充电站":"Charging station", "充电终端":"Charging point"},不需要做解释

  更好的Prompt
      请扮演一个美国电动汽车充电服务运营商,精通中文和英文,请使用以下专业术语 {"充电站":"Charging station", "电站":"Charging station", "场站":"Charging station", "充电桩":"Charging point", "充电终端":"Charging point", "终端":"Charging point" , "电动汽车":"Electric Vehicle", "直流快充":"DC Fast Charger","超级充电站":"Supercharger","智能充电":"Smart Charging","交流慢充":"AC Slow Charging"}, 把请将用户的输入翻译为英文, 请以JSON格式返回 例如 {"充电站":"Charging station", "充电终端":"Charging point"} 不需要做解释

     1.3 Prompt搞定后,使用SK框架,基于GPT4实现翻译服务, 用于专业翻译

测试一下:

4. 彩蛋环节:如何使用Github Copilot自动生成代码和单元测试。

除了国际化翻译之外,我们还需要做应用的本地化处理。例如: 提供一个公共的本地化组件,支持对数字、时间、度量衡在不同区域下的处理。 接下来分享团队基于Github Copilot开发副驾,示例完成以上代码的生成过程。

先看一下Github copilot

Prompt: 请用C#生成一个提供度量衡服务的实现类MeasurementService,它提供了以下方法将长度值转换为英寸、长度值转换为英尺、 将长度值转换为英里、 将长度值转换为厘米、 将长度值转换为千米、 将重量值转换为克、 将重量值转换为千克、 将功率值转换为瓦特、 将电流值转换为安培、 将电压值转换为伏特。 例如将长度值转换为英寸的实现方法是public double ConvertToInch(double value, LengthUnit lengthUnit),这个方法中遍历LengthUnit,做长度转换。方法请添加标准注释,使用中文注释。

这里你会发现,其他方法未实现,需要继续告诉Github Copilot继续生成代码 Github Copilot生成的代码不一定全面准确,需要做代码确认,这个很关键 Prompt: MeasurementService类中, 请参考ConvertToInch这个方法的实现方式和注释要求, 继续生成ConvertToMile,ConvertToFoot,ConvertToCentimeter, ConvertToKilometer, ConvertToGram,ConvertToKilogram, ConvertToWatt,ConvertToAmpere, ConvertToVolt等方法的具体转换逻辑, 每个方法都要实现代码输出。
我们继续让Github Copilot生成单元测试代码:
首先选择整个类,然后输入以下Prompt Prompt: @workspace /tests 请对选中的代码,使用MSTest单元测试框架,生成单元测试代码,请为每个方法都实现单元测试 

以上我们共同探讨了基于AIGC实现.NET应用国际化 从智能翻译到代码生成,
这是LLM时代一个小小的案例,但是 未来: 有LLM加持的智能翻译将更精准,全面提升用户体验。
代码自动生成将全面释放开发者创造力。
随着AIGC的迭代升级,AI将为我们带来更多应用创新和价值创造。 
 
 
周国庆
2024/1/5

.NET Conf China 2023分享-.NET应用国际化-AIGC智能翻译+代码生成的更多相关文章

  1. 2021 .NET Conf China 主题分享之-轻松玩转.NET大规模版本升级

    去年.NET Conf China 技术大会上,我给大家分享了主题<轻松玩转.NET大规模版本升级>,今天把具体分享的内容整理成一篇博客,供大家研究参考学习. 一.先说一下技术挑战和业务背 ...

  2. 讲师征集| .NET Conf China 2021正式启动

    最近社区小伙伴们一直在为11月即将在武汉举办的 第三届.NET中国峰会而忙碌,社区活动官网设计和开发工作还在进行,我们在国庆节的前一天晚上向社区正式启动了活动的序幕,也就是我们确定好了举办地点.时间, ...

  3. 来啦来啦|开源 * 安全 * 赋能 - .NET Conf China 2022

    大会介绍 .NET Conf China 2022 是面向开发人员的社区峰会,延续 .NET Conf 2022 的活动,庆祝 .NET 7 的发布和回顾过去一年来 .NET 在中国的发展成果,它是由 ...

  4. 【PPT】NET Conf China 2022,主题:C#在iNeuOS工业互联网操作系统的开发及应用

    从技术生态发展过程及理念.产品级解决方案理念.产品系统框架及主要功能介绍.产品系统二次开发和应用案例等5个方面进行了主题发言. 从2003到现在,使用.NET技术生态19年左右.  10多年的煤炭.电 ...

  5. 老李分享: Oracle Performance Tuning Overview 翻译

    老李分享: Oracle Performance Tuning Overview 翻译   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工 ...

  6. Weex Ui - Weex Conf 2018 干货分享

    本文是2018年 Weex Conf 中议题<Weex + Ui>的内容文档整理,主要给大家介绍飞猪 Weex 技术体系从无到有的过程,包括 Weex Ui 组件库的开发和发展,重点分享在 ...

  7. 2019.NET Conf China(中国.NET开发者峰会)活动全纪录:.NET技术之崛起,已势不可挡

    一.微软走向开放与.NET Core的诞生 当今时代,气象更新,技术飞速发展. 当今时代,开发者大概是最优秀的群体.每一位开发者,无不奋勇向前,努力追寻时代的步伐,以大无畏的精神迎接挑战,紧跟大时代成 ...

  8. 福利到~分享一个基于jquery的智能提示控件intellSeach.js

    一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...

  9. 分享原创可复用且非侵入性代码生成工具(for .net)

    入行IT十年了,这是本人第一次网上’献丑‘.迫于工作压力,花了大半年时间写了这个生成器以辅助开发.如有价值请多多给予建议,谢谢 好了,废话少说,开动! QA. 1.为什么要用代码生成器? 当然是为了快 ...

  10. 老李分享: Oracle Performance Tuning Overview 翻译下

    1.2性能调优特性和工具 Effective data collection and analysis isessential for identifying and correcting perfo ...

随机推荐

  1. Android Tools Project Site

    Android Tools Project Site Search this site   Projects Overview Screenshots Release Status Roadmap D ...

  2. CPU占用99%

    晚间迁移数据库后,第二天下午来调优,发现CPU占用达到惊人的99%,如下: 分析15:00-16:00期间AWR报告,发现SQL硬解析严重,如下: 每秒硬解析达到69.9次,library hit%太 ...

  3. 若依(ruoyi)开源系统保姆级实践-完成第一个页面

    一.案例描述 若依官网文档地址:http://doc.ruoyi.vip/ruoyi/document/hjbs.html 本教程主要内容,自定义数据库表,使用若依开源系统生成代码并配置权限. 若依环 ...

  4. PHP -pop魔术方法

    PHP魔术方法: PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利,在 PHP 中的作用是非常重要的.PHP 中的魔术方法通常以__(两个下划线)开始,可以在要使用时灵活调用. 例题 [ ...

  5. 轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools

    引言 在前两章节中,我们详细讲解了如何手动配置启动MongoDB.然而,现在有许多不同的工具可以帮助我们更方便地启动和创建MongoDB数据库.因此,今天我将介绍一个名为mtools的开源项目,它可以 ...

  6. Hooks的核心原理梳理

    我们前端都在诟病专业版,它的组件,它的耦合嵌套之深,它的性能. 我们希望改善,我们认为,如果--就好了. 如果重构就好了,如果技术栈统一就好了,如果有规范就好了. 其实,不用等,我们只要在写代码,就可 ...

  7. 服务器没有开放3306端口 远程访问MySQL数据库方法

    一.前言 ​ 当装有MySQL的服务器为了防止数据库被黑,提高安全性,把3306端口禁止掉,禁止对外访问,我之前写过一篇是借助跳板机的SSH隧道来访问实现安全,这种情况依然需要开放3306端口和使用一 ...

  8. Net 高级调试之七:线程操作相关命令介绍

    一.简介 今天是<Net 高级调试>的第六篇文章.上一篇文章我们说了值类型,引用类型,数组等的内存表现形式.有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们 ...

  9. CSS 也能实现 if 判断?实现动态高度下的不同样式展现

    最近在群里,有个小伙伴问了这么一道很有趣的问题: CSS 能否实现,容器再某个高度下是某种表现,一旦超出某个高度,则额外展示另外一些内容 为了简化实际效果,我们看这么一张示意效果图: 可以看到,当容器 ...

  10. powerdesigner 生成sql语言

    首先要确定的是自己已经准备好一个概念模型 在概念模型界面点击上方工具栏中的Tools->Generate logical data model.. 生成逻辑模型 同样的操作生成物理模型 Gene ...