美文网首页andnroid工具相关Android知识
英语不好?是时候打造一款AndroidStudio中记单词的翻译

英语不好?是时候打造一款AndroidStudio中记单词的翻译

作者: 香脆的大鸡排 | 来源:发表于2017-03-10 15:42 被阅读4350次

曾经那个不学好英语的蜜汁少年已在路上!
fuck Code 不止一两天。莫名我就喜欢你,虽然我没有学好英语!

老夫聊发少年狂,治肾亏,不含糖。三百年,九芝堂。英语亏欠太多api都读不懂怎么办!是时候该放大招了。


你能在本篇文章中收获什么?

  • 学会制作as插件
  • get划词翻译带记录历史的as插件
  • 擒住一只活鸡排

目录

  • 冥想
  • 找轮子
  • coding
  • 集成和使用
  • 总结

冥想


提示:不想看太多过程和废话请直接跳至集成和使用!

ヾ(。`Д´。)我擦嘞。老夫编程思想已惊天地泣鬼神、思想健壮、码到成功、功德圆满、满上满上 干了... 喂!喂!停一下你开始又乱飙车。岂能被几个英语给蹩了一脚。
开始尝试记单词,从哪里看起呢。百词斩、扇贝单词、开心词场原价都是一百多 两百多的,通通通通20块。
:-( 三天后玛德实在看不下去,那些单词软件里的东西和我写的代码好像没有半毛钱关系啊。要是有办法能把我每天不认识的编程单词都记录下来该多好呀!
仅仅只是翻译还不能满足我,我要的是以后你都在我的脑海里。
不行,我要在我的ide上直接翻译,还要把翻译的单词历史记录下来。还要方便阅读,最好是markdown格式。

需求:

  • ide上的划词翻译
  • 历史单词保存
  • markdown格式方便阅读

找轮子

那谁谁说过,不要重复造轮子。(偷懒开始)
那我们就开始搬运现成的翻译轮子呗!哈哈哈
也就是说我们需要找一款已经开源的翻译插件,在原有的基础上加上历史记录和markdown格式的保存。
ok,我们找到了ECTranslation,他已经集成了有道翻译在as中使用。并且支持了驼峰命名的代码翻译。比如常见的onCreate是无法直接翻译的。需要把on和Create拆开。这点已经在ECTranslation中非常完善了。

那么就让我们就开始愉快的扩展编码吧! 快来吧。还等啥。老娘都不怕,你怕蛇?

coding

把妹子分三步:灌醉 上车 锁好门<( ̄3 ̄)> 。
1.首先我们要下载IntelliJ IDEA。
2.创建Plugin项目给它取一个名:ReciteWords(意思是:背单词)
3.编码
具体的创建工程请参考:自己动手写一个Android Studio插件

我们在工程目录中的src建一个AnAction触发器取名ReciteWords。


将ECTranslation轮子中关键的类复制进来。
RequestRunnable是一个翻译请求线程。
Translation是翻译结果对象。
Logger是日志工具。

ReciteWords

public class ReciteWords extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
          //按下热键触发回调
    }

  ···· 省略代码
}

我们的ReciteWords继承了AnAction类,它提供了当你按下快捷热键就会触发回调actionPerformed()方法。那么我们可以在该方法中取出要翻译和记录的单词。 具体实现请移步Github看代码。地址在本文末尾。

历史记录和markdown

    /**
     *  存单词
     * @param Words 原文
     * @param translate 译文
     * @throws IOException
     */
    private void saveWords( String Words,String translate) throws IOException {
        String usrHome = System.getProperty("user.home");
        File file = new File(usrHome+"\\ReciteWords.md");// 要写入的文本文件
        if (!file.exists()) {// 如果文件不存在,则创建该文件
            file.createNewFile();
            FileWriter writer = new FileWriter(file,true);// 获取该文件的输出流
            writer.write("# 这里是你该记住的单词。请用Markdown编辑器打开它。\r\n");
            writer.write("---\r\n\r\n");
            writer.flush();// 清空缓冲区,立即将输出流里的内容写到文件里
            writer.close();// 关闭输出流,施放资源
        }
        FileWriter writer = new FileWriter(file,true);
        writer.write("- "+Words+"\r\n");
        writer.write("```\r\n");
        writer.write(translate);
        writer.write("```\r\n");
        writer.flush();
        writer.close();
    }

注释很丰满,设计很简单。saveWords方法接受两个参数,原词和译文信息。通过java File操作写入文本。markdown的格式是预先写好的字符串,在调用方法时就会往里写入。

生成插件

最后我们将整个工程生成一个Jar文件。这个文件就是插件。

方法是点击Build找到Prepare Plugin Module选项就生成了插件。

集成和使用

  • 打开Android Studio, Preferences -> Plugins -> Install plugin from disk -> 获取ReciteWords.jar安装并重启Android Studio。
  • 选中代码,按下 Ctrl + Alt+Q(也可以自己设定)。即可翻译。效果如下:
  • 翻译的单词会被记录在当前项目的根目录下的翻译历史记录.md文件中(如:\xxxProject\翻译历史记录.md)。可以通过Markdown打开它。as翻译后切换Project模式可以在项目文件夹中直接看到。效果如下:
3.png

修改快捷键

如果你要改成自己的设置的快捷键也可以哦。

  • Preferences -> Keymap -> 获取ReciteWords - > 右键 add Keyboard Shortcut. 输入你想要的快捷键即可。

提示: 如果你集成后发现按快捷键没有反应。多半是快捷键冲突了。一定要修改热键哦。

总结

程序员英语不好的人当下一抓一大把,现在编程的门槛降低了。但是如果碰上了新技术,或者是深入的去看源码性质的东西。我想未必你能立刻找到中文文档。像我这种该读书的年纪没好好念书(高中贪玩),后知后觉的才开始捡起来学的人更应该重视。毕竟学好英语等于如虎添翼呀。所以反过来看制作这样的插件是非常有必要的。如果单纯只停留在划词翻译上,可能还是没有针对性的去记忆。当时用得挺爽。过后也给忘记了。

最后如果你和我一样是个蹩脚英语的程序员,用这个插件的同时还是要回头去看那个历史记录去记哦。哈哈哈

源码和插件下载地址:https://github.com/BolexLiu/ReciteWords


如何下次找到我?

相关文章

网友评论

  • 啊耀:我是直接用有道的:sweat:
    香脆的大鸡排:@啊耀 嗯嗯 够用就行
  • apkcore:厉害了
  • cairns_cc:你的文字好骚···
  • 61abac2a4aab:鸡排很搞笑啊很勤奋啊,基本每天都有新文章。不用上班吗哈哈哈哈
    61abac2a4aab:@香脆的大鸡排 向你学习,我回家都是看电视
    香脆的大鸡排:@随便歌 :smile: 一般是下班回去晚上写的。
  • wenld_:插件不错,就是会重复插入翻译数据
    香脆的大鸡排:@梦华芳秋 在as里试试打开 Appearance&Behavior->Appearance->UI Options->Name里面设置一下别的字体即可。如果不行的话,麻烦你去github里发Issues给我,然后我看下乱码的截图是什么样子的。
    梦华芳秋:我的添加这个插件,修改了快捷键可以用,但是翻译出来的中午是乱码,请问是要修改编码格式吗?鸡排哥
    香脆的大鸡排:@wenld_ 嗯 有这个问题
  • SlientWheat:鸡排还是香脆的好!
    香脆的大鸡排:@MoonDolpen 老铁 稳
  • 妙法莲花1234:so cooooooooool.

    And what about this: https://github.com/YiiGuxing/TranslationPlugin
    香脆的大鸡排:@追风917 这个可以的 我与他们不同的是有单词历史记录
  • 225f963f19a7:厉害了Word哥 但是我照着做了除了弹出翻译 还会弹出Permission denied字样的小弹窗挡住部分翻译 请问是什么情况
    香脆的大鸡排:@一个大头呆 因为没有文件写入权限 我在在想如何解决这个问题 因为Linux 和mac平台都出现了同样的问题
    225f963f19a7:@香脆的大鸡排 是mac
    香脆的大鸡排:@一个大头呆 你是不是mac吗
  • 4ff8ab26e4eb:看不懂啊还觉得写得不错是怎么回事大哥
  • 容华谢后:相当不错
  • 旧梦圆:不错不错
  • 香脆的大鸡排:我这边已经有很多人测试通过了。评论中说不能用的朋友请单独设热键和重启、热键冲突是不能提示出来的。 热键设置方法在本文中有。
  • 钟子明:null
    java.lang.NullPointerException
    at com.intellij.ide.SystemHealthMonitor.getActionName(SystemHealthMonitor.java:542)
    at com.intellij.ide.SystemHealthMonitor.countActionInvocation(SystemHealthMonitor.java:479)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.fireBeforeActionPerformed(ActionManagerImpl.java:1190)
    at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:627)
    at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:477)
    at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:211)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:609)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:387)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    为什么重置我的昵称:@钟子明 明明是你看不懂英文搞错了,我都看到了:unamused:
    香脆的大鸡排:已修复这个bug。新版本已提交。是因为在androidStudio2.3版本中禁止了包名为空所抛出的异常。感谢你的反馈。
    钟子明:选中单词后按下快捷键没反应,改了快捷键也不行
  • auxluffy:不能用啊,大哥
    香脆的大鸡排:@auxluffy 是不是快捷建冲突了?你到keyMap快捷建里搜一下ReciteWords 看看。
    auxluffy:@香脆的大鸡排 添加jar包以后那个没什么反应啊,重启过as了,还有,我装过ECTranslation
    香脆的大鸡排:@auxluffy 说下问题,是怎么不能用呢?

本文标题:英语不好?是时候打造一款AndroidStudio中记单词的翻译

本文链接:https://www.haomeiwen.com/subject/awbngttx.html