Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🚀 功能建议:增加对在线词典的支持(如MDX Server) #241

Open
3 of 4 tasks
flyisland opened this issue Nov 27, 2023 · 11 comments
Open
3 of 4 tasks
Labels
enhancement New feature or request good first issue Good for newcomers PR wanted

Comments

@flyisland
Copy link

请先确认以下事项

  • 已仔细阅读了 README
  • issues 页面搜索过(包括已关闭的 issue),未发现类似功能建议
  • Easydict 已升级到最新版本

功能描述

EasyDict很好用,现在的一个明显局限是对词典支持不足。我认为目前“免费的”高质量词典来源有两类,一个是官方在线词典,如 https://www.ldoceonline.com/https://www.oxfordlearnersdictionaries.com 等;另一类就是 MDX 词典文件,而 MDX 词典文件 同样可以通过 https://github.com/ninja33/mdx-server 这样的工具变成在线词典。

因此,EasyDict 如果可以增加一个“自定义在线词典”的功能,则可能极大地丰富词典种类,增强 EasyDict 的效果!

使用场景(可选)

No response

实现方案(可选)

功能上要实现的主要是获取在线词典的内容进行展示。在展示方面, https://github.com/ninja33/mdx-server 的输出内容已经是可以直接展示的;但其他官方在线词典输出的往往是一个完整的页面,不适合在 EasyDict 的小窗口直接展示,还需要对网页进行裁剪。

因此建议先实现直接展示功能,就可以支持 MDX-Server;网页裁剪的功能放在后期,可以参考 https://github.com/gedoor/legado 的做法,将网页裁剪的具体规则定义开放给用户自行设置

是否愿意提交 PR 实现该功能

  • 我愿意提交 PR!
@flyisland flyisland added the enhancement New feature or request label Nov 27, 2023
@tisfeng
Copy link
Owner

tisfeng commented Nov 28, 2023

你好,Easydict 目前支持苹果系统词典,也支持第三方的 mdict 词典

https://github.com/tisfeng/Easydict/blob/main/docs/How-to-use-macOS-system-dictionary-in-Easydict-zh.md

@tisfeng
Copy link
Owner

tisfeng commented Nov 28, 2023

在线词典最大的问题是如何获取接口数据,这类词典通常不提供免费的接口,很难拿到数据。

另外,这些权限词典通常数据量大,即使有接口,选择如何显示也是一个比较难的问题。

因此,对于权威词典,我建议直接上 mdict,Easydict 只负责显示。

后续会尝试优化本地词典,例如直接读取 mdict,Easydict 内部支持词典管理,将第三方词典单个分开,而不是混合在一起等。

功能上要实现的主要是获取在线词典的内容进行展示

@flyisland
Copy link
Author

@tisfeng

我的考虑主要是这样的,这些第三方词典的本地支持,实现起来其实挺麻烦。相比之下,在线词典的反而更容易。例如 spouse 这个单词,可以通过 https://www.ldoceonline.com/dictionary/spousehttps://www.oxfordlearnersdictionaries.com/definition/english/spouse 就能直接获取。mdict 通过 https://github.com/ninja33/mdx-server 也可以变成在线词典。显示方面都不用做什么,因为这些在线字典的网页基本都是自适应的,你用手机浏览器打开前面的链接看一下就清楚。

这样的话,我理解就能通过较少的代码量支持很多第三方在线字典,而且增加不同的在线字典都可以开放出来提供界面让用户自己添加。

后续会尝试优化本地词典,例如直接读取 mdict,Easydict 内部支持词典管理,将第三方词典单个分开,而不是混合在一起等。

@tisfeng
Copy link
Owner

tisfeng commented Nov 29, 2023

我可能误解了,你的意思是直接将在线词典内嵌显示到 Easydict ?

例如查询 spouse,词典结果直接显示 https://www.ldoceonline.com/dictionary/spouse 网页?

@flyisland
Copy link
Author

我可能误解了,你的意思是直接将在线词典内嵌显示到 Easydict ?

例如查询 spouse,词典结果直接显示 https://www.ldoceonline.com/dictionary/spouse 网页?

对的,就是这个意思。这样 Easydict 就可以直接支持很多在线词典了,这个的管理是可以放开让用户自己操作的。这个网页在小屏幕显示的效果也不错,基本不用调整

image

@tisfeng
Copy link
Owner

tisfeng commented Nov 29, 2023

明白了,建议很棒,这种方式添加在线词典确实比较方便。

@tisfeng tisfeng added the good first issue Good for newcomers label Nov 29, 2023
@tisfeng
Copy link
Owner

tisfeng commented Nov 29, 2023

想了一下,要实现这个功能,主要有两方面的工作:

  1. 实现一个可自定义添加第三方服务的界面模块。
  2. 需要对第三方网页 HTML 进行一些处理。

第一点的功能实现应该不难,但如何进行功能设计,尤其 UI 的设计,这个我不太会 😓

第二点,和目前的苹果词典有点类似,都需要用 JS 和 HTML 处理,这个我也不太擅长,之前已经写得筋疲力尽了 😰

@flyisland 你可以来 PR 吗?

@flyisland
Copy link
Author

flyisland commented Nov 30, 2023

@tisfeng 主要是我没写过 Object-C,我之前做的都是后端,短期内安排不到时间来学习这个。

我的思路是这样的:

第一点的功能实现应该不难,但如何进行功能设计,尤其 UI 的设计,这个我不太会 😓

这个的确应该不难,我猜测是放一个webview来显示 http://{Online_Dictionary_Web_Site}/{word} 就可以

第二点,和目前的苹果词典有点类似,都需要用 JS 和 HTML 处理,这个我也不太擅长,之前已经写得筋疲力尽了 😰

这个部分,首先现阶段可以完全不处理,我上面放的截图可以看到,在线词典的结果基本可以不处理直接显示。
其次,就算要处理,也不要你来做。比如一开始支持将页面多余的元素去除,而具体要去除什么元素每个字典都不一样,你来做这个的确太繁琐。我认为可以开放出来,比如 Easydict的添加在线词典功能,支持删除页面元素,具体删除什么元素,可以由用户自己用一组css selector指定。我们软件本身只负责获得html后跑一遍这些css selector就可以了。

这样的设计,要实现的代码量应该就比较固定了。可以看看有没有其他熟悉 Object-C 的朋友认可这个设计愿意来 PR 的。

@tisfeng
Copy link
Owner

tisfeng commented Nov 30, 2023

先放这,等个有缘人来 PR。

@mibesr
Copy link

mibesr commented Dec 10, 2023

我觉得最终还是插件合适,一个翻译来源一个插件,反而是最简单的。
软件做核心功能,没必要一个人都搞了,可以把内容的部分开放出来。

@tisfeng
Copy link
Owner

tisfeng commented Dec 10, 2023

我也觉得可以做,但难题是如何做 #254 (comment)

要实现一个比较完整的插件系统还是挺有难度,我对 JS 了解不多,如果有人对这方面很熟悉,可以来 PR。

或者发现其他开源项目有类似的插件机制,也可以告诉我,我去研究看看。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers PR wanted
Projects
None yet
Development

No branches or pull requests

3 participants