feat(learn): spelling and grammar checked as people write (ADR 0024)

Where the instance's LanguageTool checks the language, the editors
underline what it finds after a pause, a paragraph at a time, a tap
offering its suggestions (GrammarHost, GrammarCheckController,
GrammarOverlay; nothing written into the document). A card's front is
checked in the studyset's front language, its back and answers in the
back's, everything else in the language recognised.

In a private studyset nothing is sent until the person agrees for it,
asked once in a banner above the editor and kept in their settings
(an agreement under privateAgreements, a refusal in grammarDeclined,
settings schema 14), taken back in the studyset's privacy dialog.
Settings > Writing turns it off on the device.

The field's Check asks LanguageTool first where it checks the
studyset's language, in a sheet offering to ask the assistant why;
elsewhere it asks the assistant as before (amends ADR 0021, D54).

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-25 23:51:45 +01:00
commit d2eaef255e
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -587,6 +587,10 @@
"settingsStudy": "Lernen",
"settingsStudyPomodoroTitle": "Pomodoro-Timer beim Lernen anzeigen",
"settingsStudyPomodoroSubtitle": "Zeige den Fokus-/Pausen-Countdown in der Lernsitzung, damit du die verbleibende Zeit siehst, ohne die Benachrichtigung zu öffnen.",
"settingsWriting": "Schreiben",
"settingsGrammarTitle": "Grammatik beim Schreiben prüfen",
"settingsGrammarSubtitle": "Unterstreiche mögliche Rechtschreib- und Grammatikfehler in Karteikarten und Notizen, mit Korrekturen per Fingertipp. Die Prüfung läuft, wenn du pausierst, in den Sprachen des Lernsets.",
"settingsGrammarUnavailable": "Diese Instanz hat noch keine Rechtschreib- und Grammatikprüfung eingerichtet, daher wird nichts unterstrichen. Bleibt es an, beginnt die Prüfung, sobald sie eine hat.",
"settingsVersion": "Version {version} (Build {build})",
"syncTitle": "Synchronisierung",
"syncStateSyncing": "Wird synchronisiert…",
@ -1880,12 +1884,27 @@
"assistantPrivateMark": "{name} darf dieses private Lernset bekommen",
"studysetPrivacyAssistants": "Assistenten, an die es gehen darf",
"studysetPrivacyTakeBack": "Zurücknehmen",
"studysetPrivacyGrammar": "Rechtschreibung und Grammatik",
"studysetPrivacyGrammarChecked": "Beim Schreiben von {instance} geprüft",
"studysetPrivacyGrammarNotChecked": "Beim Schreiben nicht geprüft",
"studyMissedExplain": "Nicht gewusst? {name} kann erklären, warum.",
"assistantExplain": "Erklären",
"assistantExplainQuestion": "Warum ist das die Antwort?",
"studyTypedWhy": "Warum?",
"assistantWhyTyped": "Ich habe „{typed}“ getippt. Warum stimmt das nicht?",
"assistantCheck": "Auf Fehler prüfen",
"grammarNoSuggestions": "Keine Vorschläge",
"grammarNothingFound": "Keine Rechtschreib- oder Grammatikfehler gefunden",
"grammarPrivateAsk": "Rechtschreibung und Grammatik in diesem privaten Lernset prüfen? Während geprüft wird, geht, was du hier schreibst, lesbar an {instance}, ein Absatz nach dem anderen; weder die Instanz noch ihr LanguageTool behält etwas davon. Gefragt wird einmal für dieses Lernset und seine Themen.",
"grammarPrivateNotHere": "Hier nicht",
"grammarPrivateCheckHere": "Hier prüfen",
"grammarCheckTitle": "Rechtschreibung und Grammatik",
"grammarCheckTooOften": "Gerade zu oft geprüft. Versuche es in einer Minute erneut.",
"grammarCheckTooLong": "Zu lang, um es auf einmal zu prüfen.",
"grammarCheckUnknownLanguage": "Diese Sprache prüft die Instanz nicht.",
"grammarCheckFailed": "Die Prüfung der Instanz ist nicht erreichbar. Versuche es später erneut.",
"grammarCheckAskWhy": "{name} fragen, warum",
"grammarCheckAskInstead": "{name} prüfen lassen",
"proposalsTitle": "Karteikarten von {name}",
"proposalsWriting": "{name} schreibt Karteikarten …",
"proposalsNone": "{name} hat keine Karteikarten vorgeschlagen.",