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

@ -6600,6 +6600,69 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get watchKeyEnd => 'End';
@override
String get watchProgressNew => 'New';
@override
String get watchProgressLearning => 'Learning';
@override
String get watchProgressDue => 'Due';
@override
String watchProgressLearned(int days) {
String _temp0 = intl.Intl.pluralLogic(
days,
locale: localeName,
other: 'again in $days days',
one: 'again tomorrow',
zero: 'again today',
);
return 'Learned · $_temp0';
}
@override
String get watchJisho => 'Look up on Jisho';
@override
String get watchFilter => 'Filter the words';
@override
String get watchFilterFresh => 'New words';
@override
String get watchFilterHeld => 'Words in the studyset';
@override
String get watchFilterAll => 'All words';
@override
String get watchFilterNoLevel => 'No JLPT level';
@override
String get watchFilterClass => 'Word class';
@override
String get watchFilterEmpty => 'No words of this video match the filter.';
@override
String get watchClassNoun => 'Nouns';
@override
String get watchClassVerb => 'Verbs';
@override
String get watchClassAdjective => 'Adjectives';
@override
String get watchClassAdverb => 'Adverbs';
@override
String get watchClassExpression => 'Expressions';
@override
String get watchClassOther => 'Others';
@override
String get watchNone => 'None';
@ -6621,9 +6684,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get watchWordsTitle => 'Words in this video';
@override
String get watchWordsNewOnly => 'New only';
@override
String get watchWordsFinding => 'Finding the words…';