feat(jellyfin): the words' panel unfolds senses, shows progress, filters

The panel beside the video lists each entry's senses one to a line, as
Jisho does (and as every dictionary list in the app now does), folded
to two lines; an entry unfolds over the list, not in it, after a moment
under the pointer or on a tap, in the video's colour, so nothing moves
under the pointer and words of many senses (上げる has 25) crowd out
nothing. Each entry links to the word on Jisho.org, opened only when
tapped. A word the studyset holds shows how far its card is learnt:
New, Learning, Due, or Learned with when it comes again. The video's
words go through a filter in place of New only: new to the studyset,
held or all, JLPT levels, and word classes. The dictionary's sources
stay in the panel's lower right corner, and the player's controls hide
after 2 seconds rather than 3.

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-13 18:43:06 +02:00
commit fbe53c3441
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -6658,6 +6658,70 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get watchKeyEnd => 'Ende';
@override
String get watchProgressNew => 'Neu';
@override
String get watchProgressLearning => 'Am Lernen';
@override
String get watchProgressDue => 'Fällig';
@override
String watchProgressLearned(int days) {
String _temp0 = intl.Intl.pluralLogic(
days,
locale: localeName,
other: 'in $days Tagen wieder',
one: 'morgen wieder',
zero: 'heute wieder',
);
return 'Gelernt · $_temp0';
}
@override
String get watchJisho => 'Auf Jisho nachschlagen';
@override
String get watchFilter => 'Wörter filtern';
@override
String get watchFilterFresh => 'Neue Wörter';
@override
String get watchFilterHeld => 'Wörter im Lernset';
@override
String get watchFilterAll => 'Alle Wörter';
@override
String get watchFilterNoLevel => 'Ohne JLPT-Stufe';
@override
String get watchFilterClass => 'Wortart';
@override
String get watchFilterEmpty =>
'Keine Wörter dieses Videos passen zum Filter.';
@override
String get watchClassNoun => 'Nomen';
@override
String get watchClassVerb => 'Verben';
@override
String get watchClassAdjective => 'Adjektive';
@override
String get watchClassAdverb => 'Adverbien';
@override
String get watchClassExpression => 'Ausdrücke';
@override
String get watchClassOther => 'Andere';
@override
String get watchNone => 'Keine';
@ -6679,9 +6743,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get watchWordsTitle => 'Wörter in diesem Video';
@override
String get watchWordsNewOnly => 'Nur neue';
@override
String get watchWordsFinding => 'Wörter werden gesucht …';