首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

ChatGPT学习之旅 (10) 系统全球化小助手

编程知识
2024年08月30日 07:30

大家好,我是Edison。

上一篇我们写了一个运维小助手的prompt,它帮我们写一些我们开发者不太愿意做的一些运维小任务。这一篇,给大家分享下我在日常的系统开发中遇到的多语言/全球化的任务中是如何通过GPT来帮忙完成的。

背景:基于Blazor的Web应用支持多语言

在Web应用开发中,我们可能会有一些需要多语言+本地化的场景,特别在一些国际化的外资企业当中特别常见。例如,Edison所在的IT开发团队,就需要英语,中文和德语三种语言的支持,用户可以通过“切换页面语言”这个功能来切换到适合他的语言来浏览页面的内容。因此,为Web应用提供多语言,页面内容可以本地化,会扩展我们的IT系统受众范围,提升一点用户体验。我们使用的是Blazor来开发WebUI类应用,通过创建不同的资源文件(.resx或.json)来填充页面的本地化内容,换句话说就是翻译。然后,在代码中使用IStringLocalizer来实现本地化资源的读取。

我们一般的做法是先完成一种语言的资源文件,再通过翻译到其他类型的资源文件。但是,这个过程在之前比较繁琐,需要一个个的替换,纯纯的体力活重复劳动

这里我们基于之前的提示词模板,稍作修改,形成我们的系统全球化翻译助手的提示词,如下所示,经过一些测试在GPT4-o模型下效果真的不错,建议收藏!

你是一位专业的系统多语言翻译助手 @System Globalization Assistant,我会输入相关的请求,你将根据`preferences`、`instruction`和`rules`来协助我高效完成系统语言的全球化工作。  
   
初始回复:“**Hi I'm System Globalization Assistant,Created by Edison Zhou,V1.0,20230823**
### ⚙️ Preferences:
- 🌍 src_lang: <> else English
- 🌍 dest_lang: <> else German
- 📄 output: <> else .resx
### 🤖 Menu:
请使用表格输出支持的`instructions`和对应名称,不需要解释具体含义,也不需要显示这句话:
---
请设置翻译的源语言、目标语言和输出文件格式,E.g.:/src_lang English。  
回复1保持默认。”  
   
`preferences`  
- /src_lang:<源语言偏好,默认为英语>  
- /dest_lang:<目标语言偏好,默认为德语>  
- /headers:<源文件headers偏好,默认为key value comment>
- /output:<输出文件格式偏好,默认为.resx格式>  
   
`instructions`  
- /translate:请根据用户输入的数据直接转换成用户指定的文件格式的输出翻译数据 
- /fix: 用户补充的额外需求和完善需求,非必要步骤请根据用户补充的需求完善之前输出的翻译数据 
- /help:输出支持的指令指引  
- /reset : 重新开始一轮新的对话,用户会再次输入翻译的相关信息比如translate指令,请牢记我们的rules进行输出哈  
   
`rules`  
- 请使用用户设置的偏好的源语言和目标语言进行翻译  
- 每个翻译后的文本请保持原文格式  
- 翻译文本时,提示用户翻译已完成即可,不需要输出翻译结果
- 若文本已翻译,当用户切换dest_lang时,请直接输出结果,无须再次输入需要翻译的数据
- 请一步一步思考,不需要解释过程,如果有错误,用户会纠正你  
- 若将结果转换成 .resx 文件时,格式如下:
<?xml version="1.0" encoding="utf-8"?>  
<root>  
  <resheader name="resmimetype">  
    <value>text/microsoft-resx</value>  
  </resheader>  
  <resheader name="version">  
    <value>2.0</value>  
  </resheader>  
  <resheader name="reader">  
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>  
  </resheader>  
  <resheader name="writer">  
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>  
  </resheader>  
  <!-- Translated data here -->  
  <data name="Key1" xml:space="preserve">  
    <value>Value1</value>  
  </data>  
  <data name="Key2" xml:space="preserve">  
    <value>Value2</value>  
  </data>  
  <data name="Key3" xml:space="preserve">  
    <value>Value3</value>  
  </data>  
</root> 
- 若将结果转换成 .json 文件时,格式如下:
{
  "Key1": "Value1",
  "Key2": "Value2",
  "Key3": "Value3"
}

对话示例

假设我们有一个基于.NET 6开发的Blazor项目,其使用了.resx做为资源文件(其实它本质上是一个xml文件),并首先完成了英文的资源,我们希望能迅速地把德语资源文件填充。这时,基于上面的模板,这是一个默认配置,因此直接给到GPT需要翻译的资源,这里我直接从.resx文件中拷贝出来即可:

/translate  
ActionTextLabel    Action    
AppTokenModule_CreateAppTokenDialog_Title    Create Token    
AppTokenModule_EmailReceiversHelperText    eg. aaa@siemens.com;bbb@siemens.com;    
AppTokenModule_EmailReceiversLabel    Email Receivers    
AppTokenModule_ExpireTimeLabel    Expire Time    
AppTokenModule_NamespaceLabel    Namespace    
AppTokenModule_ReceiverEmailInvalidError    Mail Receivers is invalid    
AppTokenModule_ReceiverListRequiredError    Mail Receivers is required    
AppTokenModule_ReceiverListTooLongError    Mail Receivers is too long    
AppTokenModule_TableLabel    App Token Management    
AppTokenModule_TokenExpireOptionLabel    Expire Option    
AppTokenModule_TokenNameLabel    Name    
AppTokenModule_TokenRemarkLabel    Remark    
AppTokenModule_TokenTypeLabel    Type    
AppTokenModule_UpdateAppTokenDialog_Title    Update Token    
AuthenticationModule_AuthFailedTip    Sorry, you don't have enough permission or not log in.

GPT的一个输出示例:

<?xml version="1.0" encoding="utf-8"?>  
<root>  
  <resheader name="resmimetype">  
    <value>text/microsoft-resx</value>  
  </resheader>  
  <resheader name="version">  
    <value>2.0</value>  
  </resheader>  
  <resheader name="reader">  
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>  
  </resheader>  
  <resheader name="writer">  
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>  
  </resheader>  
  <!-- Translated data here -->  
  <data name="ActionTextLabel" xml:space="preserve">  
    <value>Aktion</value>  
  </data>  
  <data name="AppTokenModule_CreateAppTokenDialog_Title" xml:space="preserve">  
    <value>Token erstellen</value>  
  </data>  
  <data name="AppTokenModule_EmailReceiversHelperText" xml:space="preserve">  
    <value>z.B. aaa@siemens.com;bbb@siemens.com;</value>  
  </data>  
  <data name="AppTokenModule_EmailReceiversLabel" xml:space="preserve">  
    <value>Email-Empfänger</value>  
  </data>  
  <data name="AppTokenModule_ExpireTimeLabel" xml:space="preserve">  
    <value>Ablaufzeit</value>  
  </data>  
  <data name="AppTokenModule_NamespaceLabel" xml:space="preserve">  
    <value>Namespace</value>  
  </data>  
  <data name="AppTokenModule_ReceiverEmailInvalidError" xml:space="preserve">  
    <value>Mail-Empfänger ist ungültig</value>  
  </data>  
  <data name="AppTokenModule_ReceiverListRequiredError" xml:space="preserve">  
    <value>Mail-Empfänger ist erforderlich</value>  
  </data>  
  <data name="AppTokenModule_ReceiverListTooLongError" xml:space="preserve">  
    <value>Mail-Empfänger ist zu lang</value>  
  </data>  
  <data name="AppTokenModule_TableLabel" xml:space="preserve">  
    <value>App-Token-Verwaltung</value>  
  </data>  
  <data name="AppTokenModule_TokenExpireOptionLabel" xml:space="preserve">  
    <value>Ablaufoption</value>  
  </data>  
  <data name="AppTokenModule_TokenNameLabel" xml:space="preserve">  
    <value>Name</value>  
  </data>  
  <data name="AppTokenModule_TokenRemarkLabel" xml:space="preserve">  
    <value>Bemerkung</value>  
  </data>  
  <data name="AppTokenModule_TokenTypeLabel" xml:space="preserve">  
    <value>Typ</value>  
  </data>  
  <data name="AppTokenModule_UpdateAppTokenDialog_Title" xml:space="preserve">  
    <value>Token aktualisieren</value>  
  </data>  
  <data name="AuthenticationModule_AuthFailedTip" xml:space="preserve">  
    <value>Entschuldigung, Sie haben nicht genügend Berechtigungen oder sind nicht eingeloggt.</value>  
  </data>  
</root>  

这时,我们可以直接将其贴到.resx文件中(比如用VS Code打开)进行覆盖,当你在Visual Studio再次打开时就能看到所有的资源项(翻译)了。

完成德语的翻译后,我们还想再填充一下中文的资源,并且让它改为输出json格式的资源文件,我们只需要执行以下指令:

/dest_lang Chinese
/output .json

GPT会直接基于上一次的需要翻译的资源,给到新的输出:

{  
  "ActionTextLabel": "操作",  
  "AppTokenModule_CreateAppTokenDialog_Title": "创建令牌",  
  "AppTokenModule_EmailReceiversHelperText": "例如 aaa@sdc.com;bbb@sdc.com;",  
  "AppTokenModule_EmailReceiversLabel": "邮件接收者",  
  "AppTokenModule_ExpireTimeLabel": "过期时间",  
  "AppTokenModule_NamespaceLabel": "命名空间",  
  "AppTokenModule_ReceiverEmailInvalidError": "邮件接收者无效",  
  "AppTokenModule_ReceiverListRequiredError": "邮件接收者是必需的",  
  "AppTokenModule_ReceiverListTooLongError": "邮件接收者太长",  
  "AppTokenModule_TableLabel": "应用令牌管理",  
  "AppTokenModule_TokenExpireOptionLabel": "过期选项",  
  "AppTokenModule_TokenNameLabel": "名称",  
  "AppTokenModule_TokenRemarkLabel": "备注",  
  "AppTokenModule_TokenTypeLabel": "类型",  
  "AppTokenModule_UpdateAppTokenDialog_Title": "更新令牌",  
  "AuthenticationModule_AuthFailedTip": "对不起,您没有足够的权限或未登录。"  
}  

如果你用的json格式资源文件,那么直接用这个json内容替换你原有的,就能整体添加了,是不是很快?

小结

本篇,我们了解了如何基于ChatGPT中来帮助我们解决一些系统开发中的多语言/全球化/本地化的任务,通过给到清晰的提示词,让这些任务的解决时间缩短一半以上。

近期,我们也在使用GitHub Copilot作为代码的副驾驶来给我们的Dev开发过程中探索提效体验,后续有机会也希望和大家分享一下GitHub Copilot的使用体会。

本文工具

本文使用的工作:Azure OpenAI Studio

本文示例大模型版本:gpt-4o

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

From:https://www.cnblogs.com/edisonchou/p/-/chatgpt_learning_notes_part10
本文地址: http://www.shuzixingkong.net/article/1570
0评论
提交 加载更多评论
其他文章 YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
前言 今天大姚给大家分享一款基于.NET8开源、免费(MIT License)功能强大的权限管理及快速开发框架,支持前后端分离,项目架构易于扩展,是中小企业的首选:YuebonNetCore。 核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展,让 Web 开发更快速、简单,解决
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架 YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架 YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)
在 Python 中,队列(Queue)是一种常用的数据结构,用于按照特定的顺序存储和访问数据。队列的主要类型包括先进先出(FIFO)、后进先出(LIFO)、优先级队列、双端队列(Deque)和环形队列,每种队列在不同的应用场景中都有其独特的用途。
全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列) 全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列) 全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)
Hive源码解析
1.概述 Apache Hive是一款建立在Hadoop之上的数据仓库工具,它提供了类似于SQL的查询语言,使得用户能够通过简单的SQL语句来处理和分析大规模的数据。本文将深入分析Apache Hive的源代码,探讨其关键组件和工作原理,以便更好地理解其在大数据处理中的角色。 2.内容 在开始源代码
Hive源码解析 Hive源码解析 Hive源码解析
ggml 简介
ggml 是一个用 C 和 C++ 编写、专注于 Transformer 架构模型推理的机器学习库。该项目完全开源,处于活跃的开发阶段,开发社区也在不断壮大。ggml 和 PyTorch、TensorFlow 等机器学习库比较相似,但由于目前处于开发的早期阶段,一些底层设计仍在不断改进中。 相比于
ggml 简介
Redis高可用方案:使用Keepalived实现主备双活
注意:请确保已经安装Redis和keepalived,本文不在介绍如何安装。 1、使用版本说明 Redis版本:5.0.2 Keepalived版本:1.3.5 Linux 版本:Centos7.9 查看Redis版本: /usr/local/redis/bin/redis-cli -v 查看Kee
Redis高可用方案:使用Keepalived实现主备双活 Redis高可用方案:使用Keepalived实现主备双活 Redis高可用方案:使用Keepalived实现主备双活
maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器
开心一刻 有一天螃蟹出门,不小心撞倒了泥鳅泥鳅很生气地说:你是不是瞎啊!螃蟹说:不是啊,我是螃蟹 概述 maven-shade-plugin 官网已经介绍的很详细了,我给大家简单翻译一下 This plugin provides the capability to package the artif
maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器 maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器 maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器
程序员失业日记4:半个月拿下4个offer
上篇文章很多小伙伴留言也讲到自己被公司裁员,还有的细心的小伙伴说去年九月就被裁了,在看一下文章的发布时间,绷不住了。先和大家说一下,我已经找到工作,因为最近工作一直都很忙,加上自己也比较懒,所以就拖了很久才写的。之前没说就是为了方便写后面的文章。也是通过本文分享一下自己找工作的方法,希望可以给大家一
程序员失业日记4:半个月拿下4个offer 程序员失业日记4:半个月拿下4个offer 程序员失业日记4:半个月拿下4个offer
基于surging 如何利用peerjs进行语音视频通话
一 、 概述 PeerJS 是一个基于浏览器WebRTC功能实现的js功能包,简化了WebrRTC的开发过程,对底层的细节做了封装,直接调用API即可,再配合surging 协议组件化从而做到稳定,高效可扩展的微服务,再利用RtmpToWebrtc 引擎组件可以做到不仅可以利用httpflv 观看r
基于surging 如何利用peerjs进行语音视频通话 基于surging 如何利用peerjs进行语音视频通话 基于surging 如何利用peerjs进行语音视频通话