feat(dictionary): German, Greek, English, Chinese and Korean words

A studyset in German, Greek, English, Chinese or Korean finds its
dictionary as one in Japanese does (ADR 0008), and its subtitles are cut
into words by its language (`WordCutting`): Chinese by its longest
words as they stand, the longer words over each cut offered as for
Japanese; Korean at its spaces, a word the dictionary lacks as it stands
taken without the particle it ends with (집에서 is 집, 아이 stays a
child); every other language at its spaces, a word written exactly so
first (the noun Essen before the verb essen). A studyset finds the
dictionary of its language tag, else of its language alone (zh for
zh-Hans).

A Wiktionary word shows its genders, principal forms, IPA, romanisation
and Hanja; a German or Greek noun of one gender goes onto its card with
its article (das Haus, το σπίτι); its tag is its word class, named in
full (Noun, Adjective, Preposition), as Wiktionary's adj and adv would
read as JMdict's codes. Articles, pronouns, prepositions and
conjunctions are left out of a video's words. Chinese words show their
pinyin over each character on the Watch screen, carry their HSK level
as a tag (HSK-1 … HSK-7-9), and the dictionary adds a level whole; the
Watch screen filters by HSK levels for Chinese, JLPT's for Japanese, and
by none for a language without. A reading is typed in a session only
when it is kana, so pinyin isn't. Words are looked up on the web on
Jisho in Japanese, on Wiktionary at the language's section otherwise,
and a search's hint speaks of kana and romaji only in Japanese.

`DICTIONARY_LANGUAGES` in deploy/.env names the languages an instance
keeps (unset: de,el,en,ko,zh; empty: none).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-14 07:45:15 +02:00
commit a2441ecdf2
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -719,6 +719,7 @@
"studysetFromDictionary": "From the dictionary",
"dictionaryTitle": "Dictionary",
"dictionarySearchHint": "A word in kanji, kana or romaji, or a meaning",
"dictionarySearchHintWords": "A word, any form of it, or a meaning",
"dictionaryNothingFound": "Nothing found for “{query}”.",
"@dictionaryNothingFound": {"placeholders": {"query": {"type": "String"}}},
"dictionaryUnreachable": "The dictionary can't be reached right now.",
@ -2122,7 +2123,8 @@
"watchProgressDue": "Due",
"watchProgressLearned": "Learned · {days, plural, =0{again today} =1{again tomorrow} other{again in {days} days}}",
"@watchProgressLearned": {"placeholders": {"days": {"type": "int"}}},
"watchJisho": "Look up on Jisho",
"watchLookUpOn": "Look up on {site}",
"@watchLookUpOn": {"placeholders": {"site": {"type": "String"}}},
"watchWider": "Longer words here",
"watchWordsTitleSong": "Words in this song",
"watchStudyWordsSong": "Study this song's words",
@ -2168,7 +2170,8 @@
"watchStretchNone": "{text} isn't in the dictionary as one word.",
"@watchStretchNone": {"placeholders": {"text": {"type": "String"}}},
"watchStretchFailed": "Couldn't look it up. Choose it again to try once more.",
"watchStretchJisho": "Search Jisho for it",
"watchStretchSearch": "Search {site} for it",
"@watchStretchSearch": {"placeholders": {"site": {"type": "String"}}},
"@watchAdded": {"placeholders": {"word": {"type": "String"}}},
"watchTapAWord": "Tap a word of the subtitles to look it up, or drag across characters to look up any part of a line (on a touch screen, hold first).",
"watchFormOf": "A form of {word}",