这是另一个简单的词典应用。支持多种数据源,包括朗文在线词典和用户加载的MDX/MDD词典文件。
本应用旨在作为一个词典工具,可在您学习英语或撰写英文文章时使用。
它不是翻译器,对于翻译需求,现代基于LLM模型的工具更为合适。
推荐使用Web模式,因为在线引擎和MDX引擎都基于HTML/CSS。如果需要将输出渲染为markdown格式,则需要为每个数据源单独编写解析器和渲染器,这工作量很大且几乎不可能完成。
我只为朗文当代英语词典编写了一个简单的markdown渲染器,您可以在某些发布版本中下载到,这样您就可以在某些情况下(比如在没有"web核心"的TUI编辑器插件中,或者直接在终端中)粗略地使用其markdown渲染输出。
- ninja33的出色作品
- Golden
- 欧路词典
- 深蓝词典
- ...
市面上有一些类似的产品。它们都是成熟的产品,但可能不太适合我(或您)的某些使用场景。相比之下,这个应用虽然还不够完善,但也有其独特的优势:
- 可以作为CLI应用程序使用,符合UNIX标准输出约定。因此您可以进一步处理输出,或将其嵌入到任何类UNIX的CLI工具中,然后轻松地集成到您的CLI/TUI工作流程中。
- 输出可以是纯文本(如Markdown格式),因此您可以使用任何渲染器来渲染它。您还可以将其嵌入到您的可扩展编辑器中。我们提供了开箱即用的neovim集成。
- 原始输出(特别是MDX词典)就是HTML/CSS/JavaScript,所以您可以直接用它搭建服务器,通过浏览器随时随地访问,无需安装任何其他应用。例如:演示网站
- 易于跨平台。核心使用Go语言编写。
- 免费开源,如果您喜欢就fork/PR/issue吧!
- Go版本 >=1.16,并将$GOBIN添加到您的$PATH中
- Neovim版本 >= 0.9.1(推荐,因为我是在这个版本上开发的,但之前的版本也可能可以使用,只需要一些"lsp"工具(不是lsp功能本身)。理论上也可以稍作修改移植到Vim上,但我目前还不太熟悉vim的popup功能)
- 可以Web模式部署在私有服务器上,没有任何遥测
- 基于朗文在线词典的在线查询支持
- 与(n)vim集成,随意在您使用的任何编辑器中使用!
- 在离线模式下,支持MDX引擎。在线引擎可能更全面和更新,但由于首次需要进行HTTP请求,所以速度较慢。而离线模式可以在没有网络连接的情况下工作,但需要预先加载词典文件。
go install github.com/ChaosNyaruko/ondict@latest
或
git clone https://github.com/ChaosNyaruko/ondict.git
make install
为了方便起见,推荐将容器中的配置目录被重新映射/挂载到您的主机配置目录,所有生成的内容(如查询历史)都会被转储到这个目录中。不会产生除此以外其他对主机文件系统的污染。
docker build . -t ondict
docker run --rm --name ondict-app --publish 1345:1345 --mount type=bind,source={your $HOME/.config/ondict},target=/root/.config/ondict ondict
docker run --rm --name ondict-app --publish 1345:1345 --mount type=bind,source={your $HOME/.config/ondict},target=/root/.config/ondict chaosnyaruko/ondict:latest
go install github.com/ChaosNyaruko/ondict/cmd/dumpdict@latest
如果你并不需要一个完整的server或词典工具,只是想解析一下MDX文件拿到里面的内容,你可以使用上述命令安装一个dumpdict工具。
这个工具主要功能是解析MDX文件,并把它们记录到一个sqlite3数据库的文件中。
可以参考这个文件中的vocab表结构进行查看,或二次开发!
ondict
ondict -h
又称Web模式,推荐使用。
本应用可以作为HTTP服务器运行,支持远程获取和查询,具有缓存和加速功能。
ondict -serve -listen=localhost:1345 -e=mdx
发起HTTP请求
curl "http://localhost:1345/?query=apple&engine=mdx&format=x"
或者直接打开浏览器,访问localhost:1345即可!
如果您使用网页浏览器访问URL,建议将format设置为"html"。浏览器将自动渲染出比"CLI"界面更美观的页面。
您也可以将其部署在您的服务器上,作为Nginx的上游,或者直接用合适的ip/端口暴露它。
您可以在本地运行make serve
来查看简单示例。由于我的前端技能有限,页面可能比较简陋,请见谅 :(。
还有很多待办事项,欢迎给我提PR,为这个尚未成熟的项目做出贡献,提前感谢。
单次查询会在首次调用时需要一些时间,因为需要进行一些加载工作。 它会使用unix domain socket启动一个本地服务器。
ondict -q <word> [-e anything]
ondict -q <word> -e mdx
ondict -q <word> -remote localhost:1345
ondict -i -e mdx
如果您使用hammerspoon的"task"功能(即"hs.task.new"然后"xx::start"),某些词的查询会阻塞进程,无法看到结果(因为还没有返回),比如"test"。但在真正的web模式下没有这样的问题,这种情况只在hammerspoon中出现。
目前还不知道原因,同样的词查询在Neovim集成中也能正常工作,后者也使用Lua作为其异步运行时。因此我猜测可能与实现有关,这可能是hammerspoon的一个bug。
使用hs.execute代替hs.task(注意shell转义),这是执行任务的"同步"方法。普通查询足够快,您不会注意到差异,会"立即"看到结果。参见示例
ondict -fzf
您需要安装FZF,并且ondict服务器监听在localhost:1345(目前正在开发中)
- 使用插件管理器或手动安装插件。
- 使用
:lua require("ondict").query()
来查询光标下的单词(<cword>)。 - 为自己定义一个更方便的映射来调用它。注意:在可视模式下,请使用 "<cmd>lua require("ondict").query()<cr>"。这样可以捕获"选中"的单词。否则,"模式"会被改变,只能查询光标下的单词(<cword>)。
使用lazy插件管理器,比较推荐这一种(现在应该很少neovim用户手动装插件吧)
require("lazy").setup({
spec = {
-- add your plugins here
{
"ChaosNyaruko/ondict",
event = "VeryLazy",
build = function(plugin)
require("ondict").install(plugin.dir)
end,
dev = false,
config = function()
require("ondict").setup("localhost:1345") -- If you already have a running ondict server, you can just specify the address.
end
},
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
-- automatically check for plugin updates
checker= { enabled = false },
})
cd ~/.local/share/nvim/site/pack/packer/start/
git clone https://github.com/ChaosNyaruko/ondict.git
cd ondict
go install .
nnoremap <leader>d <cmd>lua require("ondict").query()<cr>
vnoremap <leader>d <cmd>lua require("ondict").query()<cr>
vim.keymap.set("n", "<leader>d", require("ondict").query)
vim.keymap.set("v", "<leader>d", require("ondict").query)
将词典文件放在$HOME/.config/ondict/dicts中,支持的格式有:
// cd ~/.config/ondict
.
├── config.json
├── dicts
│ ├── LDOCE5++ V 1-35.mdd
│ ├── LDOCE5++ V 1-35.mdx
│ ├── LM5style.css
│ ├── LM5style_vanilla.css
│ ├── Longman Dictionary of Contemporary English.css
│ ├── Longman Dictionary of Contemporary English.mdx
│ ├── ODE_Zh.css
│ ├── ahd3af.css
│ ├── oald9.css
│ ├── oald9.mddx
│ └── oald9.mdx
└── history.table
{
"dicts": [
{
"name": "LDOCE5++ V 1-35",
"type": "LONGMAN5/Online"
},
{
"name": "Longman Dictionary of Contemporary English",
"type": "LONGMAN/Easy"
},
{
"name": "oald9"
}
]
}
还有很多待办事项,欢迎给我提PR,为这个尚未成熟的项目做出贡献,提前感谢。