feat(app): study sessions in rounds, by card type, cramming and reversed

A session studies a round of up to the settings' cards per round. In
spaced repetition a card leaves the round once it is a day or more away,
one rated lower comes back when due; cramming walks every card once,
round after round, its reviews moving no schedule, with going back and
on. Asking the back first (a toggle in the header, saved in the
settings) asks front/back and vocabulary cards their back, on their own
schedule. Each type studies its way: a word shows its reading and
meanings, a multiple-choice card is picked and checked, a matching card
sorted by dragging or tapping and checked; then the person rates (Bad,
OK, Good, Perfect, each with when the card comes back). Progress shows
as pills, or a tally bar while cramming; a round ends with how it went.
The session settings gain the mode, cards per round, new cards per day
and the order.

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-01 19:29:21 +02:00
commit 46855ab251
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -776,6 +776,172 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get cardTileConflict => 'Changed on two devices';
@override
String get studyClose => 'Close session';
@override
String get studyBackFirstOn =>
'Showing the back of cards first: tap to revert';
@override
String get studyBackFirstOff => 'Show the back of cards first';
@override
String get studyShowAnswer => 'Show answer';
@override
String get studyCheck => 'Check';
@override
String get studyRatingBad => 'Bad';
@override
String get studyRatingOk => 'OK';
@override
String get studyRatingGood => 'Good';
@override
String get studyRatingPerfect => 'Perfect';
@override
String get studyNothingTitle => 'Nothing to study right now';
@override
String get studyNothingBody => 'Come back later when more cards are due.';
@override
String studyNextDue(String interval) {
return 'The next card is due in $interval.';
}
@override
String get studyDone => 'Done';
@override
String get studyRoundDone => 'Round complete';
@override
String get studyContinue => 'Continue learning';
@override
String get studyPrevious => 'Previous card';
@override
String get studyNext => 'Next card';
@override
String get studyReading => 'Reading';
@override
String get studyMeanings => 'Meanings';
@override
String get studyPlaceItems =>
'Drag each item onto its category, or tap an item and then a category.';
@override
String studyMinutes(int count) {
return '$count min';
}
@override
String studyHours(int count) {
return '$count h';
}
@override
String studyDays(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count days',
one: '1 day',
);
return '$_temp0';
}
@override
String studyMonths(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count months',
one: '1 month',
);
return '$_temp0';
}
@override
String studyYears(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count years',
one: '1 year',
);
return '$_temp0';
}
@override
String studyFilteredBy(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Narrowed to $count tags',
one: 'Narrowed to 1 tag',
);
return '$_temp0';
}
@override
String get studySettingsCardsPerRound => 'Cards per round';
@override
String get studySettingsNewPerDay => 'New cards per day';
@override
String get studySettingsNewPerDayHint =>
'How many never-studied cards each studyset starts a day. Due reviews are never limited.';
@override
String get studySettingsUnlimited => 'Unlimited';
@override
String get studySettingsSortBy => 'Sort by';
@override
String get studySettingsLearnMode => 'Learn mode';
@override
String get studyModeSpaced => 'Spaced repetition';
@override
String get studyModeSpacedHint =>
'Due cards on their schedules; ratings move them.';
@override
String get studyModeCram => 'Cram';
@override
String get studyModeCramHint =>
'Walk every card without touching the schedules.';
@override
String get studySortOldestFirst => 'Oldest first';
@override
String get studySortRandom => 'Random';
@override
String get studySortNewestFirst => 'Newest first';
@override
String get studyFewer => 'Fewer';
@override
String get studyMore => 'More';
@override
String get commonCancel => 'Cancel';