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

@ -1510,6 +1510,102 @@ abstract class AppLocalizations {
/// **'From an .apkg or .colpkg file'**
String get studysetImportAnkiHint;
/// No description provided for @studysetImportCards.
///
/// In en, this message translates to:
/// **'Flashcards'**
String get studysetImportCards;
/// No description provided for @studysetImportCardsHint.
///
/// In en, this message translates to:
/// **'Pasted, or from a CSV or TSV file'**
String get studysetImportCardsHint;
/// No description provided for @cardTextImportTitle.
///
/// In en, this message translates to:
/// **'Import flashcards'**
String get cardTextImportTitle;
/// No description provided for @cardTextImportDescription.
///
/// In en, this message translates to:
/// **'One card per line: its front, a separator, then its back. Each line is split at its first separator; lines without one are left out.'**
String get cardTextImportDescription;
/// No description provided for @cardTextImportHint.
///
/// In en, this message translates to:
/// **'Paste the cards here'**
String get cardTextImportHint;
/// No description provided for @cardTextImportLoadFile.
///
/// In en, this message translates to:
/// **'Load a CSV or TSV file'**
String get cardTextImportLoadFile;
/// No description provided for @cardTextImportFileType.
///
/// In en, this message translates to:
/// **'CSV or TSV files'**
String get cardTextImportFileType;
/// No description provided for @cardTextImportUnreadable.
///
/// In en, this message translates to:
/// **'This file isn\'t text in UTF-8.'**
String get cardTextImportUnreadable;
/// No description provided for @cardTextImportSeparator.
///
/// In en, this message translates to:
/// **'Separator'**
String get cardTextImportSeparator;
/// No description provided for @cardTextSeparatorTab.
///
/// In en, this message translates to:
/// **'Tab'**
String get cardTextSeparatorTab;
/// No description provided for @cardTextSeparatorComma.
///
/// In en, this message translates to:
/// **'Comma'**
String get cardTextSeparatorComma;
/// No description provided for @cardTextSeparatorSemicolon.
///
/// In en, this message translates to:
/// **'Semicolon'**
String get cardTextSeparatorSemicolon;
/// No description provided for @cardTextImportNone.
///
/// In en, this message translates to:
/// **'No cards found yet.'**
String get cardTextImportNone;
/// No description provided for @cardTextImportReady.
///
/// In en, this message translates to:
/// **'{count, plural, =1{1 card ready to import.} other{{count} cards ready to import.}}'**
String cardTextImportReady(int count);
/// No description provided for @cardTextImportSubmit.
///
/// In en, this message translates to:
/// **'Import'**
String get cardTextImportSubmit;
/// No description provided for @cardTextImported.
///
/// In en, this message translates to:
/// **'{count, plural, =1{Imported 1 flashcard.} other{Imported {count} flashcards.}}'**
String cardTextImported(int count);
/// No description provided for @studysetReorder.
///
/// In en, this message translates to: