diff --git a/ftl/core/deck-config.ftl b/ftl/core/deck-config.ftl index 22dd0933a..95aaf71c1 100644 --- a/ftl/core/deck-config.ftl +++ b/ftl/core/deck-config.ftl @@ -342,6 +342,48 @@ deck-config-estimated-retention = Estimated retention: { $num } deck-config-complete = { $num }% complete. deck-config-reschedule-cards-on-change = Reschedule cards on change +deck-config-fsrs-tooltip = + The Free Spaced Repetition Scheduler (FSRS) is an alternative to Anki's legacy SuperMemo 2 (SM2) scheduler. + By more accurately determining when you are likely to forget, it can help you remember + more material in the same amount of time. This setting is shared by all deck presets. +deck-config-desired-retention-tooltip = + The default value of 0.9 will schedule cards so you have a 90% chance of remembering them when + they come up for review again. If you increase this value, Anki will show cards more frequently + to increase the chances of you remembering them. If you decrease the value, Anki will show cards + less frequently, and you will forget more of them. Be conservative when adjusting this - higher + values will greatly increase your workload, and lower values can be demoralizing when you forget + a lot of material. +deck-config-sm2-retention-tooltip = + If your actual retention before switching to FSRS was significantly different from 0.9, adjusting + this value will allow Anki to better estimate your memory state when it encounters cards that are + missing review logs. Since review logs typically won't be missing unless you explicitly deleted them + to free up space, most users will not need to adjust this. +deck-config-weights-tooltip = + Model weights affect how cards are scheduled. Once you've accumulated 1000+ reviews, you can optimize + the weights below. +deck-config-reschedule-cards-on-change-tooltip = + This option controls whether the due dates of cards will be changed when you enable FSRS, or change + the weights. The default is not to reschedule cards: future reviews will use the new scheduling, but + there will be no immediate change to your workload. If rescheduling is enabled, the due dates of cards + will be changed. Depending on your desired retention, this can result in a large number of cards becoming + due, so is not recommended when first switching from SM2. +deck-config-compute-optimal-weights-tooltip = + Once you've done 1000+ reviews in Anki, you can use the Optimize button to analyze your review history, + and automatically generate weights that are optimal for your memory and the content you're studying. + If you have decks that vary wildly in difficulty, it is recommended to assign them separate presets, as + the weights for easy decks and hard decks will be different. There is no need to optimize your weights + frequently - once every few months is sufficient. + + By default, weights will be calculated from the review history of all decks using the current preset. You can + optionally adjust the search before calculating the weights, if you'd like to alter which cards are used for + optimizing the weights. +deck-config-compute-optimal-retention-tooltip = + This tool assumes you're starting with 0 cards, and will attempt to calculate the amount of material you'll + be able to retain in the given time frame. The estimated retention will greatly depend on your inputs, and + if it significantly differs from 0.9, it's a sign that the time you've allocated each day is either too low + or too high for the amount of cards you're trying to learn. This number can be useful as a reference, but it + is not recommended to copy it into the desired retention field. + ## NO NEED TO TRANSLATE. This text is no longer used by Anki, and will be removed in the future. deck-config-bury-siblings = Bury siblings diff --git a/ts/deck-options/AdvancedOptions.svelte b/ts/deck-options/AdvancedOptions.svelte index b92ad3676..68f0e1146 100644 --- a/ts/deck-options/AdvancedOptions.svelte +++ b/ts/deck-options/AdvancedOptions.svelte @@ -31,11 +31,46 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html const fsrs = state.fsrs; const settings = { + fsrs: { + title: "FSRS", + help: tr.deckConfigFsrsTooltip(), + sched: HelpItemScheduler.FSRS, + }, maximumInterval: { title: tr.schedulingMaximumInterval(), help: tr.deckConfigMaximumIntervalTooltip(), url: HelpPage.DeckOptions.maximumInterval, }, + desiredRetention: { + title: tr.deckConfigDesiredRetention(), + help: tr.deckConfigDesiredRetentionTooltip(), + sched: HelpItemScheduler.FSRS, + }, + sm2Retention: { + title: tr.deckConfigSm2Retention(), + help: tr.deckConfigSm2RetentionTooltip(), + sched: HelpItemScheduler.FSRS, + }, + modelWeights: { + title: tr.deckConfigWeights(), + help: tr.deckConfigWeightsTooltip(), + sched: HelpItemScheduler.FSRS, + }, + rescheduleCardsOnChange: { + title: tr.deckConfigRescheduleCardsOnChange(), + help: tr.deckConfigRescheduleCardsOnChangeTooltip(), + sched: HelpItemScheduler.FSRS, + }, + computeOptimalWeights: { + title: tr.deckConfigComputeOptimalWeights(), + help: tr.deckConfigComputeOptimalWeightsTooltip(), + sched: HelpItemScheduler.FSRS, + }, + computeOptimalRetention: { + title: tr.deckConfigComputeOptimalRetention(), + help: tr.deckConfigComputeOptimalRetentionTooltip(), + sched: HelpItemScheduler.FSRS, + }, startingEase: { title: tr.schedulingStartingEase(), help: tr.deckConfigStartingEaseTooltip(), @@ -101,7 +136,12 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html {#if state.v3Scheduler} - FSRS + + openHelpModal(Object.keys(settings).indexOf("fsrs"))} + > + FSRS + @@ -210,7 +250,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html {:else} - + + openHelpModal(Object.keys(settings).indexOf(key))} + /> {/if} {#if state.v3Scheduler} diff --git a/ts/deck-options/FsrsOptions.svelte b/ts/deck-options/FsrsOptions.svelte index 96fee3c8f..dd2243cbf 100644 --- a/ts/deck-options/FsrsOptions.svelte +++ b/ts/deck-options/FsrsOptions.svelte @@ -25,6 +25,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import WeightsInputRow from "./WeightsInputRow.svelte"; export let state: DeckOptionsState; + export let openHelpModal: (String) => void; const presetName = state.currentPresetName; @@ -202,7 +203,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html min={0.7} max={0.97} > - + openHelpModal("desiredRetention")}> {tr.deckConfigDesiredRetention()} @@ -213,7 +214,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html min={0.7} max={0.97} > - + openHelpModal("sm2Retention")}> {tr.deckConfigSm2Retention()} @@ -224,13 +225,15 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html defaultValue={[]} defaults={defaults.fsrsWeights} > - {tr.deckConfigWeights()} + openHelpModal("modelWeights")}> + {tr.deckConfigWeights()} +
- + openHelpModal("rescheduleCardsOnChange")}> {tr.deckConfigRescheduleCardsOnChange()}