91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用IDEA怎么編寫一個翻譯插件

發布時間:2020-12-17 14:01:27 來源:億速云 閱讀:328 作者:Leah 欄目:開發技術

利用IDEA怎么編寫一個翻譯插件?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、準備

  • 由于AndroidStudio不具備開發插件的功能,需要安裝IDEA

  • 翻譯使用的是有道的翻譯接口,需要申請,接口申請的網址點這里

  • json解析使用的是GSON

二、創建工程

在此處創建的plugin工程,如下圖所示

利用IDEA怎么編寫一個翻譯插件 

填寫完工程名之后, 創建的工程結構如下所示

利用IDEA怎么編寫一個翻譯插件 

其中plugin.xml就和j2ee中web.xml功能類似,是配置插件屬性的地方。

三、擼代碼

首先,new一個Action,在彈出界面簡單填寫類的信息,如下圖

利用IDEA怎么編寫一個翻譯插件 

其中第一部分是類相關的信息,ActionID表示一個獨一無二的名字,就像Android清單文件中的包名一樣。
第二部分是將這個功能添加到哪個菜單中去,當前選擇的是添加到Edit菜單中并且作為第一個子菜單。
第三部分是這個功能的快捷鍵,可將光標置于輸入框內,點擊鍵盤進行輸入
可以看到在生成的類中有public void actionPerformed(AnActionEvent e) 這個方法,關鍵的地方就在這個方法中,在IDE中幾乎所有操作都可以在此方法中捕捉到。如下圖

利用IDEA怎么編寫一個翻譯插件 

首先獲取選中的文字,調用以下api

 final Editor mEditor = e.getData(PlatformDataKeys.EDITOR);
  if (null == mEditor) {
   return;
  }
  SelectionModel model = mEditor.getSelectionModel();
  final String selectedText = model.getSelectedText();
  if (TextUtils.isEmpty(selectedText)) {
   return;
  }

獲取到選中的文字之后,就可以調用申請到的有道翻譯接口進行翻譯,要翻譯的文本,必須是UTF-8編碼,字符長度不能超過200個字符,需要進行urlencode編碼。翻譯完成之后就可以以一個類似popupWindow的窗口將接口展示出來了。

private void showPopupBalloon(final Editor editor, final String result) {
  ApplicationManager.getApplication().invokeLater(new Runnable() {
   public 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);
   }
  });
 }

點擊綠色運行按鈕,測試成功后就可以生成安裝包了。在Build菜單中選擇 Prepare Plugin Module ‘your project name' For Deployment就可以生成安裝包了。
我只是為了自己用,所以沒有在plugin.xml文件中添加更多的詳細信息,至于怎么發布到插件庫,還請大家自行google,下面是完整的代碼。點擊這里下載我編譯好的插件,zip格式的。
完整代碼如下:
action 類

import com.google.gson.Gson;
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.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.ui.JBColor;
import org.apache.http.util.TextUtils;

import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

/**
 * Created by huangyuan on 16-7-16.
 */
public class TranslateAction extends AnAction {

 //有道翻譯接口
 private String translateUrl = "http://fanyi.youdao.com/openapi.do?keyfrom=AS-TranslatePlugin&key=your key&type=data&doctype=json&version=1.1&q=%s";

 public void actionPerformed(AnActionEvent e) {
  final Editor mEditor = e.getData(PlatformDataKeys.EDITOR);
  if (null == mEditor) {
   return;
  }
  SelectionModel model = mEditor.getSelectionModel();
  //獲取選中的文字
  final String selectedText = model.getSelectedText();
  if (TextUtils.isEmpty(selectedText)) {
   return;
  }

//  Messages.showMessageDialog(selectedText, "選中的文字", Messages.getInformationIcon());
  TranslateBean translateBean = doTranslate(selectedText);
  showPopupBalloon(mEditor,translateBean.toString());

 }

 /**
  *
  * @param translateText 需要翻譯的文本
  * @return TranslateBean 翻譯完成后轉換為對象
  * 調用翻譯接口,將返回的數據用Gson封裝為對象
  */
 private TranslateBean doTranslate(String translateText) {
  Gson gson = new Gson();
  InputStream is = null;
  StringBuffer resultData = new StringBuffer();
  try {
   URL url = new URL(String.format(translateUrl, URLEncoder.encode(translateText,"utf-8")));
   HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
   httpURLConnection.setDoInput(true); //允許輸入流,即允許下載
   httpURLConnection.setDoOutput(true); //允許輸出流,即允許上傳
   httpURLConnection.setUseCaches(false); //不使用緩沖
   httpURLConnection.setRequestMethod("GET"); //使用get請求
   is = httpURLConnection.getInputStream(); //獲取輸入流,此時才真正建立鏈接
   InputStreamReader isr = new InputStreamReader(is);
   BufferedReader bufferReader = new BufferedReader(isr);
   String inputLine = "";
   while((inputLine = bufferReader.readLine()) != null){
    resultData.append(inputLine);
   }

   System.out.println(resultData.toString());

   TranslateBean translateBean = gson.fromJson(resultData.toString(), TranslateBean.class);
   return translateBean;
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }

  return null;
 }

 /**
  *
  * @param editor Edit
  * @param result 要展示的文字
  * 以類似popupwindow的形式展示,別問我為什么這么寫,我也不知道,我是抄的api
  */
 private void showPopupBalloon(final Editor editor, final String result) {
  ApplicationManager.getApplication().invokeLater(new Runnable() {
   public 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);
   }
  });
 }
}

TranslateBean

import java.util.List;

/**
 * Created by huangyuan on 16-7-17.
 */
public class TranslateBean {


 private BasicBean basic;
 private String query;
 private int errorCode;
 private List<String> translation;
 private List<WebBean> web;

 public BasicBean getBasic() {
  return basic;
 }

 public void setBasic(BasicBean basic) {
  this.basic = basic;
 }

 public String getQuery() {
  return query;
 }

 public void setQuery(String query) {
  this.query = query;
 }

 public int getErrorCode() {
  return errorCode;
 }

 public void setErrorCode(int errorCode) {
  this.errorCode = errorCode;
 }

 public List<String> getTranslation() {
  return translation;
 }

 public void setTranslation(List<String> translation) {
  this.translation = translation;
 }

 public List<WebBean> getWeb() {
  return web;
 }

 public void setWeb(List<WebBean> web) {
  this.web = web;
 }

 public static class BasicBean {
  private List<String> explains;
  private String phonetic;

  public String getPhonetic() {
   return phonetic;
  }

  public void setPhonetic(String phonetic) {
   this.phonetic = phonetic;
  }

  public List<String> getExplains() {
   return explains;
  }

  public void setExplains(List<String> explains) {
   this.explains = explains;
  }
 }

 public static class WebBean {
  private String key;
  private List<String> value;

  public String getKey() {
   return key;
  }

  public void setKey(String key) {
   this.key = key;
  }

  public List<String> getValue() {
   return value;
  }

  public void setValue(List<String> value) {
   this.value = value;
  }

 }

 @Override
 public String toString() {

  StringBuffer webStringBuffer = new StringBuffer();

  for(int i =0;i<web.size();i++)
  {
   webStringBuffer.append(web.get(i).getKey() +":\t");
   for(int j =0 ;j<web.get(i).getValue().size();j++)
   {
    webStringBuffer.append(web.get(i).getValue().get(j));
   }
   webStringBuffer.append("\n");
  }

  StringBuffer translateBuffer = new StringBuffer();
  for(int i = 0;i<basic.getExplains().size();i++)
  {
   translateBuffer.append(basic.getExplains().get(i) +"\n");
  }
  return query +"\n" + basic.getPhonetic() +"\n" + translateBuffer.toString() +"\n網絡釋義+\n" + webStringBuffer.toString();
 }
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

简阳市| 铁岭县| 昂仁县| 南和县| 怀远县| 密山市| 乌拉特后旗| 忻城县| 颍上县| 林周县| 松溪县| 昌都县| 兴国县| 昆明市| 东海县| 井冈山市| 如皋市| 稻城县| 卓资县| 麻城市| 中阳县| 浦江县| 古蔺县| 天峻县| 新平| 离岛区| 达日县| 灵武市| 江华| 浪卡子县| 康马县| 陆丰市| 卫辉市| 湛江市| 鹤岗市| 伊宁市| 松滋市| 江西省| 自贡市| 泰州市| 南江县|