feat(app): a character card for kanji and kana

One card type for both (card schema 7): the character on the front, its
meanings and a kanji's on and kun readings, each merging on its own. A
kana's romaji is its meaning, so kana are studied, and later written,
exactly as kanji are. The composer offers it beside the other kinds, each
kind of reading on one line (ショク、ジキ); studying shows the character
large and, with the answer, its meanings and readings (the other way round
when asked from the back); the card browser filters by it and finds a kun
reading without its okurigana dot; the Markdown export writes its meanings
and readings.

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 15:00:21 +02:00
commit 2fc4205010
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -3418,6 +3418,12 @@ abstract class AppLocalizations {
/// **'Map'**
String get composerKindMap;
/// No description provided for @composerKindCharacter.
///
/// In en, this message translates to:
/// **'Character'**
String get composerKindCharacter;
/// No description provided for @composerLabelFront.
///
/// In en, this message translates to:
@ -3442,6 +3448,12 @@ abstract class AppLocalizations {
/// **'Prompt'**
String get composerLabelPrompt;
/// No description provided for @composerLabelCharacter.
///
/// In en, this message translates to:
/// **'Character'**
String get composerLabelCharacter;
/// No description provided for @composerLabelBack.
///
/// In en, this message translates to:
@ -3478,6 +3490,12 @@ abstract class AppLocalizations {
/// **'Add prompt'**
String get composerPlaceholderPrompt;
/// No description provided for @composerPlaceholderCharacter.
///
/// In en, this message translates to:
/// **'Add a kanji or kana'**
String get composerPlaceholderCharacter;
/// No description provided for @composerAddAnswer.
///
/// In en, this message translates to:
@ -3754,6 +3772,48 @@ abstract class AppLocalizations {
/// **'Remove sense'**
String get vocabularyRemoveSense;
/// No description provided for @characterPrimaryMeaningHint.
///
/// In en, this message translates to:
/// **'Primary meaning, or a kana\'s romaji'**
String get characterPrimaryMeaningHint;
/// No description provided for @characterOnReadings.
///
/// In en, this message translates to:
/// **'On readings'**
String get characterOnReadings;
/// No description provided for @characterOnReadingsHint.
///
/// In en, this message translates to:
/// **'From Chinese, in katakana: ショク、ジキ'**
String get characterOnReadingsHint;
/// No description provided for @characterKunReadings.
///
/// In en, this message translates to:
/// **'Kun readings'**
String get characterKunReadings;
/// No description provided for @characterKunReadingsHint.
///
/// In en, this message translates to:
/// **'Japanese, in hiragana, okurigana after a dot: た.べる'**
String get characterKunReadingsHint;
/// No description provided for @characterOn.
///
/// In en, this message translates to:
/// **'On'**
String get characterOn;
/// No description provided for @characterKun.
///
/// In en, this message translates to:
/// **'Kun'**
String get characterKun;
/// No description provided for @matchingCategories.
///
/// In en, this message translates to:
@ -7257,6 +7317,12 @@ abstract class AppLocalizations {
/// **'Maps only'**
String get cardBrowserTypeMap;
/// No description provided for @cardBrowserTypeCharacter.
///
/// In en, this message translates to:
/// **'Characters only'**
String get cardBrowserTypeCharacter;
/// No description provided for @cardBrowserFilterTag.
///
/// In en, this message translates to: