Files
readest/apps/readest-app/data/wordwise/manifest.json
T
Huang Xin 4908245042 feat(reader): Word Wise inline vocabulary hints (#4589)
* feat(reader): Word Wise — inline native-language vocabulary hints

Kindle-style Word Wise: a short native-language gloss renders above difficult words
as you read (always-on ruby), gated by a CEFR vocabulary-level slider (A1–C2);
tapping a glossed word opens the existing dictionary.

- Pipeline: CEFR→frequency-rank difficulty, inflection-aware gloss index, pure
  offset-aware planner (EN regex + jieba for CJK).
- Rendering: <ruby cfi-skip>…<rt cfi-inert> injected per occurrence — CFI-transparent
  (verified), so highlights/bookmarks/progress are unaffected; kept out of TTS word
  offsets and find-in-book.
- Delivery: gloss packs are version-controlled in data/wordwise/, mirrored to R2, and
  downloaded on demand into local storage (sha-verified, single-flight) when enabled.
- Settings: a Word Wise sub-page under Settings → Language (enable, level, hint
  language, per-pack download/manage, auto-download toggle).
- Build tooling: scripts/build-wordwise-data.mjs (ECDICT / CC-CEDICT+HSK / WikDict +
  FrequencyWords, with lemmatization) and scripts/sync-wordwise-r2.mjs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* data(wordwise): bundled gloss packs + manifest + attribution

13 frequency-trimmed gloss packs (en↔中文 + es/fr/de/pt/it/ru↔en, ~19 MB) generated
by build-wordwise-data.mjs from ECDICT (MIT), CC-CEDICT + HSK, and WikDict +
FrequencyWords (CC-BY-SA). Source of truth, mirrored to the CDN via `pnpm wordwise:sync`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 07:56:00 +02:00

123 lines
3.1 KiB
JSON

{
"schemaVersion": 1,
"packs": [
{
"pair": "de-en",
"source": "de",
"target": "en",
"file": "de-en.json",
"bytes": 1938011,
"sha256": "697c7072d7808abba08e554f47efd92d5ac5555e6d4edf14bbf8a7d65697fff1",
"entries": 13806
},
{
"pair": "en-de",
"source": "en",
"target": "de",
"file": "en-de.json",
"bytes": 962032,
"sha256": "e7475f241743006278a3d771b08570f4bc9a49faa32007837e7a74461ee188e9",
"entries": 14487
},
{
"pair": "en-es",
"source": "en",
"target": "es",
"file": "en-es.json",
"bytes": 946854,
"sha256": "9b91c73c693bdade1458eb234eaa606a6490a6ec851deb229556fa4cbac21081",
"entries": 14322
},
{
"pair": "en-fr",
"source": "en",
"target": "fr",
"file": "en-fr.json",
"bytes": 933430,
"sha256": "ff7dbd0a8b6a063db4ee69bcf595b718cd8f23542860a6f8377b43e0c093abdc",
"entries": 14653
},
{
"pair": "en-pt",
"source": "en",
"target": "pt",
"file": "en-pt.json",
"bytes": 924391,
"sha256": "776ce8b30aca99856927ddc767c432d987c79efe0024729418ada9f1c261bce8",
"entries": 14209
},
{
"pair": "en-ru",
"source": "en",
"target": "ru",
"file": "en-ru.json",
"bytes": 1197025,
"sha256": "1d8e7c044d2412c6608dce7844dd0a90f40f041c95692879a9649284a55e6d6a",
"entries": 14491
},
{
"pair": "en-zh",
"source": "en",
"target": "zh",
"file": "en-zh.json",
"bytes": 2343610,
"sha256": "693a94940e07e64c332366a9033dd3f3bd86ce18b6d439fdb7074383668bb5c6",
"entries": 26729
},
{
"pair": "es-en",
"source": "es",
"target": "en",
"file": "es-en.json",
"bytes": 1764204,
"sha256": "5b4765271c693f7fe3f1f4b39beb2e2a14dc77c48ee86aac7e19fa8f6010ff64",
"entries": 10949
},
{
"pair": "fr-en",
"source": "fr",
"target": "en",
"file": "fr-en.json",
"bytes": 1898800,
"sha256": "6568130bd48cb6a18e18d90770dbb16ed286f0527bbeea42c4c88b97f71ea78b",
"entries": 12361
},
{
"pair": "it-en",
"source": "it",
"target": "en",
"file": "it-en.json",
"bytes": 1979183,
"sha256": "4536f8663ea9976b4e1e10b340989ed1d7c5a77cc5715eb705c54f9b92744f55",
"entries": 11657
},
{
"pair": "pt-en",
"source": "pt",
"target": "en",
"file": "pt-en.json",
"bytes": 2510246,
"sha256": "0be519b683c2c46c9c3f79a81c79d74e3e17e35c3ffdacf5fa8d9ec5c32a404e",
"entries": 11808
},
{
"pair": "ru-en",
"source": "ru",
"target": "en",
"file": "ru-en.json",
"bytes": 2200460,
"sha256": "edd67795bc4a30fa296ca929d8f2b6e052c024874300136c1b2b419456ee5eb8",
"entries": 8780
},
{
"pair": "zh-en",
"source": "zh",
"target": "en",
"file": "zh-en.json",
"bytes": 602685,
"sha256": "01804d83f5342ac877c1a7682affda7d663511dde44990bf883242522fef92fd",
"entries": 12000
}
]
}