feat(app): cite sources in APA, MLA or Chicago, and give studysets a bibliography

A source is now shared by learning paths and studysets (core/citation/):
authors as full names, year, title, what it is a part of, publisher,
ISBN, link, and a citation kept as a file brought it. formatCitation
cites it in APA 7, MLA 9 or Chicago 18: it inverts and abbreviates
names itself (particles, suffixes, names written as already cited stay),
sets a work of its own in italics and a part of something apart from
the whole, and writes a missing year as "n.d." in APA and Chicago.

- Settings: a Citations card per device, with a preview and a link to
  the style's own guide.
- Studysets: a Bibliography button opens the works cited, to read and,
  behind its pencil, to change (studyset schema 4).
- Steps: sources edited through the same sheet, opened from an
  "N sources" button in the runner (step schema 2; schema 1 reads on).
- Path import: steps' sources, text kept as written, the old format's
  "citation" read as what a source is part of.

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-07 17:07:04 +02:00
commit 65976ae63a
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -195,6 +195,13 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get studysetOptions => 'Optionen';
@override
String get studysetBibliography => 'Literaturverzeichnis';
@override
String get studysetBibliographyIntro =>
'Die in diesem Lernset zitierten Werke, im Zitierstil aus den Einstellungen.';
@override
String get studysetMenuEdit => 'Bearbeiten';
@ -457,28 +464,10 @@ class AppLocalizationsDe extends AppLocalizations {
String get stepFeedbackNone => 'Keines';
@override
String get stepSources => 'Quellen';
String get sources => 'Quellen';
@override
String get stepAddSource => 'Quelle hinzufügen';
@override
String get stepRemoveSource => 'Quelle entfernen';
@override
String get stepSourceAuthors => 'Autoren';
@override
String get stepSourceYear => 'Jahr';
@override
String get stepSourceTitle => 'Titel';
@override
String get stepSourceUrl => 'Link';
@override
String stepSourcesCount(int count) {
String sourcesCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
@ -488,6 +477,104 @@ class AppLocalizationsDe extends AppLocalizations {
return '$_temp0';
}
@override
String get sourcesNone => 'Noch keine Quellen angegeben.';
@override
String get sourcesEdit => 'Quellen bearbeiten';
@override
String get sourcesEditDone => 'Bearbeiten beenden';
@override
String get sourceAdd => 'Quelle hinzufügen';
@override
String get sourceEdit => 'Quelle bearbeiten';
@override
String get sourceRemove => 'Quelle entfernen';
@override
String get sourceRemoved => 'Quelle entfernt';
@override
String get sourceSheetAdd => 'Hinzufügen';
@override
String get sourceAuthors => 'Autoren';
@override
String get sourceAuthorsHint =>
'Vollständige Namen, einer pro Zeile, z. B. Mark A. McDaniel';
@override
String get sourceYear => 'Jahr';
@override
String get sourceYearHint => 'z. B. 2014';
@override
String get sourceTitle => 'Titel';
@override
String get sourceTitleHint => 'Titel des Werks';
@override
String get sourceContainer => 'Erschienen in';
@override
String get sourceContainerHint =>
'Zeitschrift, Buch oder Website, mit Seiten';
@override
String get sourceContainerHelper =>
'Leer lassen bei einem eigenständigen Werk wie einem Buch.';
@override
String get sourcePublisher => 'Verlag';
@override
String get sourcePublisherHint => 'z. B. Belknap Press';
@override
String get sourceIsbn => 'ISBN';
@override
String get sourceIsbnHint => 'z. B. 978-0-674-72901-8';
@override
String get sourceUrl => 'Link';
@override
String get sourceUrlHint => 'https://…';
@override
String sourceImportedAs(String citation) {
return 'Importiert als: $citation';
}
@override
String sourceIsbnLine(String isbn) {
return 'ISBN: $isbn';
}
@override
String get sourceAvailableAt => 'Verfügbar unter:';
@override
String get sourceEmpty => 'Leere Quellenangabe';
@override
String get sourceDiscardTitle => 'Änderungen verwerfen?';
@override
String get sourceDiscardMessage =>
'Was du für diese Quelle eingegeben hast, geht verloren.';
@override
String get sourceDiscardConfirm => 'Verwerfen';
@override
String get stepConflict =>
'Dieser Schritt wurde auf einem anderen Gerät anders geändert. Behalte eine Version, um weiterzuschreiben.';
@ -897,6 +984,31 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get settingsLanguageDevice => 'Gerätesprache';
@override
String get settingsCitations => 'Quellenangaben';
@override
String get settingsCitationsDescription =>
'Wie Quellen und die Literaturverzeichnisse von Lernsets auf diesem Gerät zitiert werden. Gib die vollständigen Namen der Autoren ein: Jeder Stil kürzt und ordnet sie selbst.';
@override
String get settingsCitationStyle => 'Stil';
@override
String get settingsCitationStyleApa => 'APA (7. Auflage)';
@override
String get settingsCitationStyleMla => 'MLA (9. Auflage)';
@override
String get settingsCitationStyleChicago => 'Chicago (18. Auflage)';
@override
String get settingsCitationPreview => 'Vorschau';
@override
String get settingsCitationGuide => 'Offizieller Leitfaden';
@override
String settingsVersion(String version, String build) {
return 'Version $version (Build $build)';
@ -3122,6 +3234,10 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get pathImportTitleNotText => 'ein Titel muss Text sein.';
@override
String get pathImportMalformedSource =>
'eine Quelle muss ein Objekt oder Text sein und ihre Teile Text.';
@override
String get pomodoroTopBarHint =>
'Der Timer kann in der oberen Leiste von GNOME herunterzählen, mit seinen Knöpfen, sobald die Erweiterung „AppIndicator“ an ist.';