文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何开发一个vscode百度翻译插件

2023-06-22 02:18

关注

本篇文章给大家分享的是有关如何开发一个vscode百度翻译插件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

每次给元素取className的时候总是时不时的要去百度翻译下,大大的减慢了开发速度,这款简易版的vscode百度翻译插件,直接写中文选中轻松一键转换为英文,也可选中英文进行翻译。

一、项目搭建

项目搭建可直接采用官方脚手架。

安装脚手架

npm install -g yo generator-code

项目生成

yo code

项目运行

直接按F5即可运行,运行成功后会弹出一个新的vscode窗口,窗口标题会注明扩展开发主机

二、准备工作

由于该插件采用的是百度翻译的api,所有首先需要使用百度账号登录百度翻译开放平台,注册成为开发者,获得APPID以及APPKEY。

接入方式

通过调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。

请求api如下:

https://fanyi-api.baidu.com/api/trans/vip/translate?q=&from=&to=&appid=&salt=&sign=

三、项目开发

主要的开发文件就是清单文件package.json以及入口文件extension.js

package.json

配置如下:

{// 插件名,必须用全小写无空格的字母组成 "name": "vscode-translate-plugin",// 插件市场所显示的插件名称。"displayName": "vscode-translate-plugin",// 插件描述"description": "vscode 百度翻译插件",// 插件版本"version": "0.0.1",// 插件图标,最小128x128像素"icon": "img/icon.png",// 插件最低支持的vscode版本支持"engines": {"vscode": "^1.50.0"},// 插件应用市场分类,可选值: [Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs]"categories": ["Other"],// 激活事件数组"activationEvents": ["onCommand:vscode-translate-plugin.helloWorld"],// 插件入口"main": "./extension.js",// 描述插件的发布内容"contributes": {"commands": [                        {                            "command": "vscode-translate-plugin.helloWorld",                            "title": "Hello World"                        }                  ]         },"scripts": {"lint": "eslint .","pretest": "npm run lint","test": "node ./test/runTest.js"},"devDependencies": {"@types/vscode": "^1.50.0","@types/glob": "^7.1.3","@types/mocha": "^8.0.0","@types/node": "^12.11.7","eslint": "^7.9.0","glob": "^7.1.6","mocha": "^8.1.3","typescript": "^4.0.2","vscode-test": "^1.4.0"}}

主要是配置activationEventscontributes这两个配置项

1、activationEvents

插件在VS Code中默认是没有激活的,那要怎么激活呢?可以通过activationEvents进行配置,目前有以下几种激活时机。

该翻译插件在这里配置了三个命令:

"activationEvents": [       // 将英文翻译成中文命令      "onCommand:extension.translateToZh",       // 将中文翻译成英文命令      "onCommand:extension.translateToEn",       // 将中文替换成相应中文的命令      "onCommand:extension.replaceWithEn"  ],

2、contributes

主要有以下配置

该翻译插件的配置如下:

"contributes": {    // 命令    "commands": [        {            "command": "extension.translateToZh",            "title": "translateToZh"    },        {            "command": "extension.translateToEn",            "title": "translateToEn"        },        {            "command": "extension.replaceWithEn",            "title": "replaceWithEn"        }     ],    // 快捷键绑定    "keybindings":[        {           // 命令           "command": "extension.translateToZh",           // windows快捷键绑定            "key": "ctrl+shift+t",           // mac快捷键绑定            "mac": "cmd+shift+t",            "when": "editorTextFocus"        },        {            "command": "extension.translateToEn",            "key": "ctrl+shift+e",            "mac": "cmd+shift+e",            "when": "editorTextFocus"        },        {            "command": "extension.replaceWithEn",            "key": "ctrl+shift+r",            "mac": "cmd+shift+r",            "when": "editorTextFocus"        }    ],    // 菜单    "menus": {        // 编辑器上下文菜单,即点击鼠标右键出来的菜单        "editor/context": [            {            // 编辑器聚焦时                "when": "editorFocus",                // 点击菜单项触发的命令                "command":"extension.translateToZh",                // 分组排序,navigation组始终在最上方                "group": "navigation"            },            {                "when": "editorFocus",                "command":"extension.translateToEn",                "group": "navigation"            },            {                "when": "editorFocus",                "command":"extension.replaceWithEn",                "group": "navigation"            }        ]    },    // 插件配置项    "configuration": {        "type": "object",        "title": "translate configuration",        "properties": {        // 百度翻译请求api            "translate.url": {                "type": "string",                "default": "****",                "description": "百度翻译API"            },            // 百度翻译appId            "translate.appId": {                "type": "string",                "default": "****",                "description": "百度翻译appId"            },            // 百度翻译appKey            "translate.appKey": {                "type": "string",                "default": "****",                "description": "百度翻译appKey"            }        }      }  },

extension.js

该文件为插件的入口文件,一般包括两个函数activatedeactivate。其中activate函数是插件激活时也就是在注册的activationEvents发生的时候就会执行。deactivate中放的是插件关闭的代码。

我们需要在插件激活的时候注册activationEvents里配置的命令,并且实现该命令的触发函数,然后给插件订阅该命令。

完整代码如下

const vscode = require('vscode');const request = require('request')const crypto = require('crypto')const randomstring = require('randomstring')// md5函数function getMD5(content) {    if (!content) {    return content    }    let md5 = crypto.createHash('md5')    md5.update(content)    let d = md5.digest('hex')    return d.toLowerCase()}// 翻译函数function translate(targetType) {    return new Promise((resolve, reject) => {        // 打开的vscode窗口对象        const editor = vscode.window.activeTextEditor        // 若没有打开的窗口,则返回        if (!editor) {            console.log('no open text editor')            return        }        // 选中的文本位置        let selection = editor.selection        // 获取选中的文本        let text = editor.document.getText(selection)        // 没有选中的文本,则返回        if (!text) {            console.log('no choosed text')            return        }        // 随机数        let salt = (new Date()).getTime() + randomstring.generate()        // 获取package.json里的配置项        const config = vscode.workspace.getConfiguration()        // 请求百度翻译api,翻译选中的文本        request.post({            url: config.get("translate.url"),            formData: {                q: text,                from: 'auto',                to: targetType,                appid: config.get("translate.appId"),                salt: salt,                sign: getMD5(config.get("translate.appId") + text + salt + config.get("translate.appKey"))          }        }, function (err, res, body) {            if (err) {                vscode.window.showInformationMessage('翻译出错了:' + err.message)                return            }            try {                let msg = JSON.parse(body);                if (msg.error_code) {                    vscode.window.showInformationMessage('翻译出错了:' + msg.error_msg);                } else {                    // 返回翻译结果                    resolve((msg.trans_result)[0].dst)                }            } catch (e) {            vscode.window.showInformationMessage('翻译出错了:' + e.message);            }        })    })}// 文本替换函数,将当前选中的文本替换为传进来的valconst insertText = (val) => {    const editor = vscode.window.activeTextEditor    if (!editor) {        vscode.window.showErrorMessage('no open text editor')        return    }    const selection = editor.selection    const range = new vscode.Range(selection.start, selection.end)    editor.edit((editBuilder) => {    editBuilder.replace(range, val)    })}// 插件激活时的入口function activate(context) {    // 注册命令    // 翻译成中文    var transToZhDisposable = vscode.commands.registerCommand('extension.translateToZh', function () {        translate('zh').then(res =>{            // vscode窗口右下角显示翻译内容            vscode.window.showInformationMessage(decodeURIComponent(res));        })    })    // 翻译成英文    var transToEnDisposable = vscode.commands.registerCommand('extension.translateToEn', function () {        translate('en').then(res =>{        vscode.window.showInformationMessage(decodeURIComponent(res));        })    })    // 将中文替换为英文    var replaceWithEnDisposable = vscode.commands.registerCommand('extension.replaceWithEn', function () {        translate('en').then(res =>{        // 将选中的中文替换成相应的英文        insertText(res)        })    })    // vscode订阅注册的命令    context.subscriptions.push(transToZhDisposable);    context.subscriptions.push(transToEnDisposable);    context.subscriptions.push(replaceWithEnDisposable);}exports.activate = activate;// 插件释放的时候触发function deactivate() {}module.exports = {    activate,    deactivate}

至此开发完成,按F5即可运行项目。按下Ctrl+Shift+P打开vscode的命令面板,输入插件中注册的命令,即可执行。我们也添加了相应的快捷键和菜单,直接使用快捷键或者点击鼠标右键出现的菜单都可以执行相应的命令。

以上就是如何开发一个vscode百度翻译插件,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯