GithubHelp home page GithubHelp logo

hcfyapp / crx-selection-translate Goto Github PK

View Code? Open in Web Editor NEW
4.0K 4.0K 539.0 3 KB

一站式划词 / 截图 / 网页全文 / 音视频翻译扩展。

Home Page: https://hcfy.app

chrome chrome-extension crx firefox javascript pdf translation

crx-selection-translate's People

Contributors

lmk123 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crx-selection-translate's Issues

添加一个设置项

打开右上角的翻译盒子时,会自动将剪切板的文本粘贴到翻译框并翻译。为这一行为添加一个设置项,默认开启。

检测到错误时应该在控制台输出相关信息

v5.2 之前,很多用户反馈总是卡在“正在翻译,请稍候……”,于是在 #11 中我猜测可能的原因之一是因为服务器的 json 数据结构里,原本应该是一个数组的属性不是数组了,导致调用 Array.prototype.join 方法时报错,于是内容脚本接收不到背景页返回的翻译结果,就一直卡在那儿了。

于是在 v5.3 中,我专门对每个应该是数组的地方进行了类型检测,而刚才我在使用有道翻译 platform 的时候,出现了一个有趣的现象:单词详细释义部分是正常的,可是结果部分却显示“啊哦,有道翻译返回了一个奇怪的东西,稍后再重新试试看吧。”,看来我的猜测是正确的!

可是再次翻译的时候,这个问题已经不能重现了。所以我应该在检测到这类错误的时候将相关信息输出在控制台,让我查查看原本应该是数组的地方到底返回了什么,这样也便于用户反馈。

v6.0 roadmap

使用划词翻译的用户越来越多,需求也越来越多,v5.x 的程序结构已经不太容易维护了,我准备花时间再次重写划词翻译,即开发 v6.0。

v6.0 将实现以下目标:

  • 有完善的单元测试。这将很容易检查出代码的改动会不会影响程序的其它部分。
  • 使用 Webpackes2015、以基于模块的方式构建程序结构。
  • 使用 Vue.js 构建程序界面。
  • 将常用的功能分离出去单独维护。

需要注意的是,v6.0 不会修复 bug 或添加新功能,这一版本的主要目标是重组程序结构。

目前的进度:

  • 将常用功能分离成多个子项目
  • 基本功能(翻译、网页划词翻译、翻译盒子、设置页、复制文本)
  • #35 将网页翻译功能移动到翻译盒子里去
  • #68 网页划词翻译与翻译盒子的通用样式
  • 设置页中添加/删除禁用域名功能的样式
  • 添加 v5.x 中的谷歌翻译与必应翻译,见 translation.js
  • 错误处理
  • 完善朗读功能
  • 对比 v5.6.1 与 v6.0 看看有哪些遗漏的细节
  • #71 发布 Beta 版至 Chrome 网上应用店并小范围的测试
  • 全面重构代码便于写单元测试
  • 最后,完成接近 100% 的测试覆盖率

功能基本已开发完成,我已经将 v6.0 Beta 版发布至 Chrome 网上应用店了,你可以帮忙测试

重构划词翻译

代码改动已经稍显困难,所以需要再进行一次重构。这其中涉及到:

  1. 重构内容脚本
  2. 使用 jQuery 而不是自己的 L.js 作为主要框架。我可以删除jQuery中一些不需要的部分,而且应该记录下来
  3. 将模板里的逻辑与 data-* 属性尽可能的剥离
  4. 重构完成之后,还应该更新 Gruntfile.js

扩展程序结构改变

Chrome 更新至 38 后,在https链接下无法发起 http 的ajax请求,这一问题涉及到:

1)翻译结果的获取(在5.0下已统一写死成 https)
2)语言类型的检测(百度和有道都不支持使用 https 访问它们的语言检测接口),这导致https下的播放功能失效。

实际上,在background和popup这类属于扩展程序的页面之中,上面两种限制都没有(background里面也可以播放语音)。所以我决定对扩展进行一点改变:

将background作为一个中间层,content script 和 popup 都通过中间层来得到数据,至于ajax请求、语音播放这类问题就交给中间层来做。

重构 stroage 部分

目前,与 stroage 相关的代码分布在各个地方。为了将来能统一处理存储区域,应该将与 stroage 有关的代码都整理到 stroage.js (原 settings.js )中,并提供一个 change 事件用于外部代码监听数据变动。

关于 全页翻译 的建议

目前全页翻译用的是快捷键alt+z
很不明显,不看帮助还不知道,建议点击《插件图标(是插件图标,不是划词后出来的译,图标)》后,能够增加一个全页翻译的按钮。

翻译 PDF 内的文本

在 Chrome 中打开 PDF 文件时,Chrome 默认会使用一个插件来渲染而不是用 DOM,所以划词翻译无法获取用户在插件内选中的文本,但是,我可以使用 pdf.js 在一个新的页面打开 PDF,这样划词翻译就能正常获取到页面上选中的文本了。(至少在这个演示页面是能正常使用的)

顺便将上面提到的演示页面用的 pdf 文件写上,可以用来测试。
http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf

一个官方提供的结合 webpack 使用的例子:
https://github.com/mozilla/pdf.js/tree/master/examples/webpack

错误检测

很多用户都反馈总是会出现卡在“正在翻译,请稍候……”的情况,我猜想可能是因为这样几个原因:

  1. 翻译接口返回的数据类型不对。例如有用户反馈了一个“不能读取不存在的 join 属性”的错误信息,只有当接口原本应该返回一个数组但又没有返回数组时才会出现这个错误
  2. 扩展/浏览器升级的时候,内容脚本尝试连接到背景页时会出现“无法连接至iekngfjdisheudhsyeh(我的扩展的app id)”的错误
  3. 偶尔会莫名其妙的,内容脚本向背景页发起查询,背景页会返回一个 undefined 回来也会导致报错。目前我在模板里做了一个判断,如果是这个情况就显示错误信息。这部分逻辑同样应该移出模板

但这些错误都只需要刷新一下网页或者重启一下浏览器就没问题了,可是还有用户反馈无论怎么做都还是会出现问题。所以我应该有一个完备的错误检测过程。从内容脚本发起查询请求到接收到结果,这里面一个环节出了问题,就会导致各种错误。

在显示错误信息的同时,还应该附上一个能帮助用户解决问题的链接才对。否则用户不知道应该刷新浏览器,而是一味的“撞墙”的话,体验就差了。

希望能加入单词本和词频功能

希望能够让查询过的单词自动加入单词本,并且在单词本中可以查看、删除查询的单词,再配合记录单词本中每个单词被查询的次数的功能。这样的话,使用者通过单词本自动收集不认识的单词,再通过记录每个单词被查次数的功能筛选出对用户而言的高频词,便可以针对性的记忆这些高频词。
这个想法是在参照知乎里如何学英语的话题时根据透析法修改来的,浏览器承担着用户接触英语的责任,在查词的过程中,生词本会容纳对用户而言的生词,但生词有高频和低频,这样就得用记录查询次数的方法透析出高频词。
假如能够实现这些功能的话,就是真的是学英语者福音了。

文本太长时不翻译

经常需要copy网页上的一大段英文,
我觉得这个时候没有必要执行翻译请求(结果也是翻译不了),

所以可以考虑增加一个配置项目: 当超过一定长度时不翻译.

thx

潜在的模板更新bug

查看 v5.3 中 select.js 第 382 行 可发现,内容脚本没有等待配置数据准备好就注册了一系列的事件。虽然内容脚本运行于 document_start ,但是在第一个 mouseup 事件发生时,数据(主要是模板,因为模板只会编译一次)可能还没有配置好,导致用户只会看到“没有加载模板!”

解决方案:要么将事件注册移到 chrome.storage.local.get 的回调里,要么就像在 v5.2 中那样,每次设置 template 属性时,都重新编译一次。

关于 template 属性的变更时机:目前用户无法自定义主题,所以模板唯一可能会变更的情况就是在扩展更新的时候,此时内容脚本会与背景页“失去联系”(即发生“无法连接到扩展程序”的错误),不过我会提示用户刷新网页,而刷新之后加载到的模板就是最新的了,所以实际上问题不大;而且,即使未来用户能自定义主题了,可是要在不刷新网页的情况下应用新的主题也很麻烦,因为主题的 css 必须得通过扩展程序注入页面中,而不是通过内容脚本生成一个 style 标签来包含样式,否则某些页面会出现样式不生效的问题,例如用户反馈的 http://source.android.com/devices/tech/security/index.htmlhttps://docs.oracle.com/javase/8/docs/api/index.html

添加更多的网页翻译工具

希望可以加入网页翻译的默认翻译引擎。 现在默认alt+z网页翻译是有道吧。
有的时候有道感觉并不准确。 但是速度比较快。 翻译不准确的时候我一般都会去用必应翻译 去翻译网页。bing感觉比有道准确一些。
功能大概就是 alt+z可以用预设的网页翻译引擎

添加翻译按钮

划词后显示一个翻译按钮,点击后再翻译。并且为这个功能加一个开关的选项。

翻译框的边缘显示问题

前面我做了些许控制,让翻译框不会移出浏览器的左侧和顶部,但右侧和底部没做限制,偶尔翻译框会超出。

建议增加翻译盒子实时翻译功能

就是点击浏览器右上角插件图标时出现的翻译盒子,可不可以检测一下用户1秒(或者0.5s ?)内停止输入的话,就自动查询并返回结果,而不是每次输入都要手动点击 “翻译” 按钮。

另外翻译盒子中可不可以通过按 Enter 回车键来关联 “翻译” 按钮呢?

PS:插件很好用,感谢作者!

将翻译功能添加进右键菜单

做的简单一点,就一个“翻译”功能。原因是因为有 win8 平板用户无法选中单词,但是长按选中的单词是可以弹出右键菜单的

双击翻译在 Linux Chrome 47 中失效

我认为应该尽量减少用户从点击到得到翻译结果的成本?
尽管目前的做法可能是考虑到用户不希望每次双击都弹出翻译。
不过希望可以考虑增加一个选项,双击直接翻译。

多语言支持

考虑支持英语,但是那么长的语言列表都翻译成英语真是麻烦。。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.