idea自定义中英文翻译插件

  • 插件的开发
    • 参考网址
    • 前提
    • idea创建项目
    • 代码
    • 运行
    • 发布到自己的idea
    • 打包方式
    • 总结

插件的开发

参考网址

(gradle例子,真的讲的好)
(gradle例子2)
(官网文档地址,gradle构建)

前提

1.idea需要安装这两个插件
2.电脑安装gradle(非必须)
如果电脑没有安装gradle,idea会自动安装,就是给你安装到c盘,然后给你占用几个G/(ㄒoㄒ)/~~
gradle安装的官网教程
官网安装在c盘的,我们这里随便安装在哪就行

idea创建项目

官方文档上面有这些说明,说的很清楚
文档
我需要提及的是,官网那个教程是默认给我们安装个gradle到c盘,下载插件过后大概有几个g,所以我们需要配置自己的gradle,在gradle安装目录创建**.gradle**文件夹,大部分gradle的东西都保存在这


等待下载插件完成

代码

关于实现,translate类继承一个类,重写方法,在xml中注册即可
官方文档关于继承action的说明
这三个文件需要修改

这是translate的代码,可以直接复制使用

package com.first.translate;import com.alibaba.fastjson.JSONObject;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.SelectionModel;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.ui.JBColor;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.http.util.TextUtils;
import org.jetbrains.annotations.NotNull;import java.awt.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;public class translate extends AnAction {@Overridepublic void actionPerformed(@NotNull AnActionEvent e) {//Gets the current project entityProject project = e.getData(PlatformDataKeys.PROJECT);//Gets the current mousefinal Editor mEditor = e.getData(PlatformDataKeys.EDITOR);if (null == mEditor) {return;}//Gets the selected mouseSelectionModel model = mEditor.getSelectionModel();//textfinal String selectedText = model.getSelectedText();if (TextUtils.isEmpty(selectedText)) {return;}showPopupBalloon(mEditor,doGet("http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i="+selectedText));//http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=你好}//Display popup windowprivate void showPopupBalloon(final Editor editor, final String result) {ApplicationManager.getApplication().invokeLater(new Runnable() {@Overridepublic void run() {JBPopupFactory factory = JBPopupFactory.getInstance();factory.createHtmlTextBalloonBuilder(result, null, new JBColor(new Color(186, 238, 186), new Color(73, 117, 73)), null).setFadeoutTime(5000).createBalloon().show(factory.guessBestPopupLocation(editor), Balloon.Position.below);}});}public static String doGet(String url) {CloseableHttpClient httpClient = null;CloseableHttpResponse response = null;String result = "";try {// Create an instance of httpClient with the address default configurationhttpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);
//            httpGet.setHeader("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");// Connection host service timeoutRequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// Request timeout.setConnectionRequestTimeout(35000)// Data read timeout.setSocketTimeout(60000).build();httpGet.setConfig(requestConfig);response = httpClient.execute(httpGet);// Gets the returned data by returning the objectHttpEntity entity = response.getEntity();result = EntityUtils.toString(entity);List<List<JSONObject>> re = (List<List<JSONObject>>)JSONObject.parseObject(result, HashMap.class).get("translateResult");result= ""+re.get(0).get(0).get("tgt");} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (null != response) {try {response.close();} catch (IOException e) {e.printStackTrace();}}if (null != httpClient) {try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}}return result;}
}

plugin.xml中内容如下,修改下自己的

<idea-plugin><id>com.idea.plugins</id><!--这个是在idea已安装插件那里显示的名字--><name>hello</name><vendor email="1768923041@qq.com">qinjie</vendor><!--这个是在idea已安装插件那里显示的--><description><![CDATA[test<br><em>most HTML tags may be used</em>]]></description><!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.htmlon how to target different products --><!-- uncomment to enable plugin in all products<depends>com.intellij.modules.lang</depends>--><extensions defaultExtensionNs="com.intellij"><!-- Add your extensions here --></extensions><actions><group id="com.first.translate" text="translate" description="translate"><action id="com.first.translate.translate" class="com.first.translate.translate" text="translate" description="translate" /><!--添加到菜单栏尾部--><add-to-group group-id="MainMenu" anchor="last"  /></group></actions>
</idea-plugin>

build.gradle中的代码

plugins {id 'java'id 'org.jetbrains.intellij' version '0.4.16'
}group 'com.idea'
version '1.0-SNAPSHOT'sourceCompatibility = 1.8repositories {maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}mavenLocal()
//    mavenCentral()
}dependencies {compile group:'com.alibaba', name:'fastjson', version:'1.2.58'testCompile group: 'junit', name: 'junit', version: '4.12'
}intellij {version '2019.1.4'
}
patchPluginXml {changeNotes """Add change notes here.<br><em>most HTML tags may be used</em>"""
}
jar{
// 将所依赖的jar放进去from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}into('assets'){from 'assets'}
}

运行

点击运行,打开新的一个idea窗口,第一次运行会下载插件
给它设置快捷方式
使用快捷方式测试测试

发布到自己的idea

运行后如下目录有这个文件,idea手动安装插件即可。安装方式如下图
注意build.gradle中有下面代码,不然依赖的包不会被打包进入生成的jar

jar{
// 将所依赖的jar放进去from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}into('assets'){from 'assets'}
}

重启后,给它设置快捷键即可,运行测试

打包方式

直接运行也可以生成jar,或者如下图右边运行那些命令
中英文都是可以翻译的,用的我也不知道是哪个的翻译接口,网上找的,试了一下可以就用了。

总结

折腾了一天,最后搞定了,不算太难,应该说是不熟悉吧。看网上说gradle好像用的人也多,有些人从maven到gradle了。这样一个插件也算是对自己有用的,不用运行一个单独的翻译软件。

idea自定义中英文翻译插件相关推荐

  1. cad中英文翻译插件使用

    1.先安装飞狼自定义库插件. 2.通过菜单操作命令,操作步骤是:点击菜单的飞狼自定义库-点击翻译2,如下图 3.选译翻译方式及翻译后文字摆放位置,然后点击确定. 4.点击需要翻译的文字.

  2. 多语种互译批量中英文翻译插件

    中英文文章翻译在我们网站建设,特别是WordPress搭建的外贸独立站和部分博客和资讯网站中有很大的需求,翻译软件可以帮助我们完成英文翻译中文,中文翻译英文的互译,也可以实现韩文.日文.俄文.葡萄牙语 ...

  3. Zotero PDF翻译插件自定义翻译功能实现

    Zotero PDF翻译插件自定义翻译功能实现 一 需求 二.实现演示 三.Zetero翻译插件的功能定制 3.1 开发环境 3.2 开发步骤 3.3 插件开发实现 3.3.1 添加服务 3.3.2 ...

  4. 20210828每周分享(第二期)-中英文对照翻译插件、笔记软件

    1.资讯集中 ​ 发现个非常好用的资讯集中网站,每天早上到公司后,都会打开看看.不用把时间浪费在刷各种APP上,每天稍微了解下时事就行. ​ 网址:http://make.mk/ 2.中英文对照翻译插 ...

  5. Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  6. 火狐翻译插件_阅读外文必备,浏览器实用的翻译插件推荐

    本文背景 笔者是一位普通的软件开发者,经常会需要阅读各类技术文档,虽然大多数情况下可能会有中文版文档,但是并不是所有都会有,但是笔者英文算不上好,马马虎虎的样子,阅读一些外文技术文档经常会出现看不懂. ...

  7. Rasa 文档 中英文翻译版本 3 - Tutorial: Building Assistants

    Rasa 文档 中英文翻译版本 3 - Tutorial: Building Assistants https://rasa.com/docs/rasa/user-guide/building-ass ...

  8. IE和Outlook Express的翻译插件设计

    IE和Outlook Express的翻译插件设计 摘要:本文主要介绍了在IE和Outlook Express中加入翻译插件的设计过程.对于IE,插件开发主要采用创建BHO对象,浏览器调用过程中载入C ...

  9. 【工具】Vscode翻译插件推荐(不用谷歌翻译api、支持短句英汉互译、支持查词、支持自动补全、不需要浏览器)

    需求: 1)偶尔需要查英文生词: 2)有时候想不起来中文对应的英文: 3)不想回到浏览器打开一堆网页: 4)谷歌翻译挂了. 偶尔需要的需求: 1)短句翻译. 因为谷歌翻译挂了,首先,排除最热门的翻译插 ...

最新文章

  1. python工具使用笔记
  2. gVim 取消自动备份(Windows/Linux)
  3. 学习笔记-小甲鱼Python3学习第九讲:了不起的分支和循环3
  4. centos 6.7 ssh免密登录配置
  5. Android TextureView 与 SurfaceView用法区别
  6. html中加载页面时调用函数,js页面加载时调用函数方法
  7. win10 android 手机驱动下载,小米手机驱动win10驱动
  8. GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
  9. Self-Attention详解
  10. 电脑不分盘有没有关系
  11. 为什么同时需要IP地址和MAC地址
  12. OSG 添加文字(显示中英文)
  13. 微信小程序开发实战(24):选择图像
  14. java week of year_JDK Calendar类获取WEEK_OF_YEAR时的陷阱
  15. 极光IM系列之java后台集成
  16. 运维实战:DNS服务篇
  17. 第28章 Spring框架内的JNDI支持
  18. 详解吉首大学第九届“新星杯”G芒砀山的神秘数字 两种dp
  19. python中数字逐个递增_Python中递增和递减运算符的行为
  20. Windows下设置任意窗口总在最前面不被遮挡的方法

热门文章

  1. 哈夫曼编码(文件编码与解码)
  2. 讨人喜欢的27个原则
  3. [时态]七、时态总结
  4. Vue前端js循环遍历数组八种方法总结最新
  5. Linux 使用configure生成的Makefile再编译的时候报错:missing aclocal-1.14 -I m4 make: *** [aclocal.m4] 错误 127
  6. 对不起,腾讯我也拒绝了
  7. 心理学与生活-情绪与情感
  8. 2019-01-10工作日志
  9. 用爱心符拼一个爱心(第二次作业)
  10. outlook小技巧之创建规则