feat(app): import flashcards from text

Import content gains Flashcards: pasted, or from a CSV or TSV file, one
card per line, split at its first tab, comma or semicolon (a .csv picks
commas), lines without both sides left out. Quoted fields are read as
spreadsheets write them, and a UTF-8 byte order mark is ignored. The
cards come in at the studyset's end with the origin "text", so the
dashboard doesn't count them as written.

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-08 14:43:49 +02:00
commit 18c1370bf6
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -890,6 +890,72 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get studysetImportAnkiHint => 'Aus einer .apkg- oder .colpkg-Datei';
@override
String get studysetImportCards => 'Karteikarten';
@override
String get studysetImportCardsHint =>
'Eingefügt oder aus einer CSV- oder TSV-Datei';
@override
String get cardTextImportTitle => 'Karteikarten importieren';
@override
String get cardTextImportDescription =>
'Eine Karte pro Zeile: ihre Vorderseite, ein Trennzeichen, dann ihre Rückseite. Jede Zeile wird an ihrem ersten Trennzeichen geteilt; Zeilen ohne eines werden ausgelassen.';
@override
String get cardTextImportHint => 'Füge die Karten hier ein';
@override
String get cardTextImportLoadFile => 'CSV- oder TSV-Datei laden';
@override
String get cardTextImportFileType => 'CSV- oder TSV-Dateien';
@override
String get cardTextImportUnreadable => 'Diese Datei ist kein Text in UTF-8.';
@override
String get cardTextImportSeparator => 'Trennzeichen';
@override
String get cardTextSeparatorTab => 'Tab';
@override
String get cardTextSeparatorComma => 'Komma';
@override
String get cardTextSeparatorSemicolon => 'Semikolon';
@override
String get cardTextImportNone => 'Noch keine Karten erkannt.';
@override
String cardTextImportReady(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Karten bereit zum Importieren.',
one: '1 Karte bereit zum Importieren.',
);
return '$_temp0';
}
@override
String get cardTextImportSubmit => 'Importieren';
@override
String cardTextImported(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Karteikarten importiert.',
one: '1 Karteikarte importiert.',
);
return '$_temp0';
}
@override
String get studysetReorder => 'Umsortieren';