当前位置: 首页 > Web前端 > HTML5

vscode系列:做一个五脏六腑的翻译插件

时间:2023-04-05 13:29:13 HTML5

要做的效果如下,是翻译功能~需要准备一个百度翻译开发者账号,获取appid和keynpminstall-gyogenerator-codekeyvscodeAPI获取当前activity编辑器选中的文本vscode.window.activeTextEditor.document.getText(range?:Range)调用快速选择面板vscode.window.showQuickPick(items:string[]|Thenable,options?:QuickPickOptions)开始CODINGScaffolding创建文件夹codeyocode选择JavaScript(Extension),然后回车默认。百度翻译API代码创建translate-api.js文件这里需要知道如何获取用户配置,毕竟同一个appid和key是有调用次数限制的。需要以下步骤。注册贡献点在vscode中,所有需要展现在用户面前的功能,比如菜单、命令、视图等,都需要在package.json中注册贡献点。投稿配置项如下"contributes":{"configuration":[{"title":"translateNamed","properties":{"translate.appid":{"type":"string","default":"20200921000570318","description":"百度翻译API-appid"},"translate.secret":{"type":"string","default":"8iaGzb7v0225xQ8SVxqq","description":"百度翻译API-Key"}}}]},找到用户配置ok后,注册贡献点,就可以通过API找到刚才注册的配置项了。vscode.workspace.getConfiguration().get((section:string))调用API。习惯用axios,所以yarnaddaxiosmd5,这里的md5是百度翻译API需要的。OK,下面是translate-api.js的代码。constaxios=require("axios")constvscode=require("vscode")constmd5=require("md5")constappid=vscode.workspace.getConfiguration().get("translate.appid")constsecret=vscode.workspace.getConfiguration().get("translate.secret")module.exports={/***翻译方法*@param{string}q查询字符串*@param{string}来自源语言*@param{string}到目标语言*@returns{{data:{trans_result:[{src:string,dst:string}]}}}Promisetranslationresult*/translate(q,from,to){varsalt=Math.random()returnaxios({method:"get",url:"https://fanyi-api.baidu.com/api/trans/vip/translate",params:{q,appid,from,to,salt,sign:md5(appid+q+salt+secret),},})},}如果需要换成其他翻译API,比如:googletranslation,只需要改translate-api.js代码即可。运行vscode回extension.js。第一步,我们需要找到编辑器当前选中的文本。constcurrentEditor=vscode.window.activeTextEditorconstcurrentSelect=currentEditor.document.getText(currentEditor.selection)currentEditor.document.getText方法需要Range,但是由于selection继承自Range,所以可以直接将currentEditor.selection放入参数中。第二步是分词。翻译过来的词一般都是用空格隔开的,所以用空格隔开就可以了。constlist=result.split("")constarr=[]//-符号连接arr.push(list.map((v)=>v.toLocaleLowerCase()).join("-"))//下划线joinarr.push(list.map((v)=>v.toLocaleLowerCase()).join("_"))//大驼峰arr.push(list.map((v)=>v.charAt(0).toLocaleUpperCase()+v.slice(1)).join(""))//小驼峰arr.push(list.map((v,i)=>{if(i!==0){returnv.charAt(0).toLocaleUpperCase()+v.slice(1)}returnv.toLocaleLowerCase()}).join(""))第三步将结果放入快速选择面板。letselectWord=awaitvscode.window.showQuickPick(arr,{placeHolder:"请选择要替换的变量名",})第四步用选择的结果替换选择的文本if(selectWord){currentEditor.edit((editBuilder)=>{editBuilder.replace(currentEditor.selection,selectWord)})}全部代码可以去github查看:github入口文件是extension.js更方便,注册菜单更方便,注册菜单贡献点."menus":{"editor/context":[{"when":"editorHasSelection","command":"translate.zntoen","group":"navigation"}]}其中,when指的是当菜单出现时出现选项,editorHasSelection指的是当编辑器中有被选中的文本时。查看何时以及还有哪些其他选项可用?vscode贡献点时的文档命令指的是点击菜单时需要执行的命令。组是指放置菜单的地方。查看组以及可用的选项?在vscode组文档中添加图标在package.json中配置“icon”:“images/icon.png”,其中images/icon.png是一张128*128像素的图片。添加git仓库,修改readme等,如果不添加git仓库,发布时会有警告。不修改readme就无法发布!要创建帐户令牌,您必须先创建一个Microsoft帐户。创建完成后,打开如下链接https://aka.ms/SignupAzureDevOps,点击右上角的UserSettings->Personalaccesstokens。当提示选择新的token范围时,选择登录vscecreate-publisheryour-publisher-namepublishvscepublish插件地址:https://marketplace.visualstudio.com/items?itemName=chendm.translate&ssr=false#overviewvscode搜索translateNamed,即可体验。在github上查看代码:https://github.com/chendonming/translate