feat(app): the dictionary in the app: look words up, add them as cards

A studyset's dictionary follows from its language, as decided: the
instance's dictionary of its front's language, with meanings in its
back's (else English). Nothing to attach or detach; nothing of it shows
where there is none.

- Add material › From the dictionary: search a word (kanji, kana,
  romaji, meaning) and add it as a flashcard, or add a whole level
  (JLPT N5…N1, common words) at once, asked first above 500 words, its
  progress shown. Words already in the studyset show as such and are
  left out. Each card is a vocabulary card (headword, reading, senses
  with their codes), tagged `jlpt-n5` and with its word class, and
  marked as imported from the dictionary.
- Look up beside a vocabulary card's front fills the card with the word
  chosen, keeping its hints, explanation and tags.
- A card keeps the dictionary entry it was made from (card schema 6:
  `dictionary` {source, id}), to be found again and not added twice.
- The dictionary's credits show at its foot and in About, as its licence
  asks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-09 01:33:12 +02:00
commit add1c76842
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1743,6 +1743,114 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get cardSenses => 'Wortbedeutungen';
@override
String get cardDictionaryEntry => 'Wörterbucheintrag';
@override
String get studysetFromDictionary => 'Aus dem Wörterbuch';
@override
String get dictionaryTitle => 'Wörterbuch';
@override
String get dictionarySearchHint =>
'Ein Wort in Kanji, Kana oder Romaji, oder eine Bedeutung';
@override
String dictionaryNothingFound(String query) {
return 'Nichts gefunden für „$query“.';
}
@override
String get dictionaryUnreachable =>
'Das Wörterbuch ist gerade nicht erreichbar.';
@override
String get dictionaryRetry => 'Erneut versuchen';
@override
String get dictionaryAdd => 'Hinzufügen';
@override
String get dictionaryInStudyset => 'In diesem Lernset';
@override
String dictionaryAdded(String word) {
return '„$word“ hinzugefügt.';
}
@override
String get dictionaryLevels => 'Eine ganze Stufe hinzufügen';
@override
String get dictionaryLevelsHint =>
'Jedes Wort einer Stufe wird eine Karteikarte, in der Reihenfolge ihrer Liste, mit Stufe und Wortart als Tags. Wörter, die schon in diesem Lernset sind, werden ausgelassen.';
@override
String get dictionaryLabelCommon => 'Häufig';
@override
String dictionaryAddLevel(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Wörter hinzufügen',
one: '1 Wort hinzufügen',
);
return '$_temp0';
}
@override
String dictionaryAddingLevel(int done, int count) {
return 'Wird hinzugefügt… $done von $count';
}
@override
String dictionaryWordsAdded(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Wörter hinzugefügt.',
one: '1 Wort hinzugefügt.',
zero: 'Keine neuen Wörter.',
);
return '$_temp0';
}
@override
String dictionaryWordsSkipped(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count waren schon in diesem Lernset.',
one: '1 war schon in diesem Lernset.',
);
return '$_temp0';
}
@override
String dictionaryConfirmTitle(int count) {
return '$count Wörter hinzufügen?';
}
@override
String get dictionaryConfirmMessage =>
'Jedes wird eine Karteikarte in diesem Lernset.';
@override
String get dictionaryConfirmAdd => 'Hinzufügen';
@override
String dictionaryCredits(String sources) {
return 'Wörter aus $sources.';
}
@override
String get dictionaryLookUp => 'Im Wörterbuch nachschlagen';
@override
String get aboutDictionaries => 'Wörterbücher dieser Instanz';
@override
String get cardReportTitle => 'Fehler melden';