feat(learn): share a studyset with people from its Share sheet

Share opens one sheet (Halkyon's ADR 0044, D29): the people first, then
the community. A studyset of the person's own offers Share with people,
which says what it does, moves it into a space of its own with its
progress told and Abort, and opens it there (StudysetSharingCubit). A
shared one lists its members (SpaceMembersCubit): the Owner invites by
handle as Editor or Viewer, changes roles, hands on and removes, and
deletes it for everyone; anyone leaves, the Owner naming who takes it
on; each refusal is said. A member's row opens their safety code
(twelve groups of five digits) to mark compared, and changed keys are
flagged, trusted only after comparing (D32). The community row leads to
the privacy dialog or publishing as Share did, and is off for a shared
studyset (D27).

A studyset knows its space and whether the person only views it
(Studyset.sharedIn, viewOnly, from the sync engine's grants). Its mark
is Lucide's users icon, "Shared · private" (D31). A Viewer's studyset
screen, its options, its topics and the move sheet offer nothing that
writes, and say they can view and study it (D30); the engine refuses
their writes on the device in any case. A shared top isn't moved,
archived or deleted from its options, and nothing moves in or out of
its space.

Whats-New: Share a studyset with people: invite them by their handle as editors or viewers, and compare safety codes to know nobody stands between you.
Whats-New-De: Teile ein Lernset mit Personen: Lade sie über ihr Handle als Bearbeiter:innen oder Betrachter:innen ein und vergleicht Sicherheitscodes, damit niemand zwischen euch steht.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-11 15:26:47 +01:00
commit 9b344141ef
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -2211,5 +2211,64 @@
"publishMaterialAllBut": "Alles außer diesem",
"publishMaterialOnlyThis": "Nur dieses",
"publishMaterialOptions": "Damit auswählen",
"publishMaterialCount": "{count, plural, =0{Keine Notizen oder Dateien gehen mit} =1{1 Notiz oder Datei geht mit} other{{count} Notizen und Dateien gehen mit}}"
"publishMaterialCount": "{count, plural, =0{Keine Notizen oder Dateien gehen mit} =1{1 Notiz oder Datei geht mit} other{{count} Notizen und Dateien gehen mit}}",
"studysetVisibilityShared": "Geteilt · privat",
"shareTitle": "{title} teilen",
"sharePeople": "Personen",
"sharePartOf": "Teil von {title}, das mit diesen Personen geteilt ist:",
"sharePeopleIntro": "Lernt und schreibt es gemeinsam. Die anderen sehen es wie du, versiegelt nur für die Personen, die du einlädst.",
"shareWithPeople": "Mit Personen teilen",
"shareCommunity": "Community",
"shareCommunityNotShared": "Für Lernsets, die mit Personen geteilt sind, noch nicht.",
"shareAborted": "Teilen abgebrochen. Das Lernset ist wie vorher.",
"shareWithPeopleTitle": "{title} mit Personen teilen",
"shareWithPeopleConfirm": "Teilen",
"shareWithPeopleBody": "Es zieht mit allem darin, auch deinem Fortschritt, in einen eigenen Bereich, der dir gehört. Dann lädst du Personen über ihr Handle ein. Themen bleiben darin, und solange es geteilt ist, lässt es sich nicht veröffentlichen.",
"shareRefusedPublished": "Etwas darin ist veröffentlicht oder war es. Lernsets mit einer Veröffentlichung lassen sich noch nicht teilen.",
"shareRefusedKeys": "Dieses Gerät hat die Schlüssel deines Kontos nicht. Melde dich zuerst mit deinem Passwort an.",
"shareRefusedUnreached": "Deine Instanz war nicht erreichbar. Versuch es noch einmal, sobald du online bist.",
"shareFailed": "Teilen ist fehlgeschlagen. Das Lernset ist wie vorher.",
"workStageSpace": "Den Bereich anlegen",
"workStageCleaning": "Die alte Kopie entfernen",
"shareMembersUnreachable": "Deine Instanz war nicht erreichbar.",
"shareInvite": "Einladen",
"shareInviteTitle": "Jemanden einladen",
"shareInviteHandle": "Handle der Person",
"shareRoleOwner": "Besitzer:in",
"shareRoleEditor": "Bearbeiter:in",
"shareRoleViewer": "Betrachter:in",
"shareRoleEditorHint": "Lernt es und ändert es mit dir.",
"shareRoleViewerHint": "Lernt es, kann es aber nicht ändern.",
"shareYou": "du",
"shareInvited": "eingeladen",
"shareKeysChanged": "Schlüssel geändert",
"shareCompared": "Sicherheitscode verglichen",
"shareMemberOptions": "Optionen für das Mitglied",
"shareMakeEditor": "Zur Bearbeiter:in machen",
"shareMakeViewer": "Zur Betrachter:in machen",
"shareMakeOwner": "Zur Besitzer:in machen",
"shareMakeOwnerTitle": "{name} zur Besitzer:in machen?",
"shareMakeOwnerBody": "Ab dann entscheidet diese Person, mit wem es geteilt ist. Du bleibst Bearbeiter:in.",
"shareRemove": "Entfernen",
"shareRemoveTitle": "{name} entfernen?",
"shareRemoveBody": "Diese Person sieht es und alles, was darin von nun an geschrieben wird, nicht mehr.",
"shareLeave": "Verlassen",
"shareLeaveTitle": "{title} verlassen?",
"shareLeaveBody": "Es verschwindet mit deinem Fortschritt darin aus deiner Bibliothek. Damit du zurückkommst, muss dich jemand erneut einladen.",
"shareLeaveNextOwner": "Wem gehört es nach dir?",
"shareDeleteForEveryone": "Für alle löschen",
"shareDeleteTitle": "{title} für alle löschen?",
"shareDeleteBody": "Es verschwindet endgültig, mit allem darin und dem Fortschritt aller, aus der Bibliothek jedes Mitglieds. Das lässt sich nicht rückgängig machen.",
"shareRefusedNoHandle": "Niemand auf deiner Instanz hat dieses Handle.",
"shareRefusedAlreadyMember": "Diese Person ist schon Mitglied oder eingeladen.",
"shareRefusedLastMember": "Du bist das einzige Mitglied: lösch es stattdessen.",
"shareRefusedUnavailable": "Deine Instanz teilt keine Lernsets.",
"shareRefusedNotAllowed": "Das kann nur die Besitzer:in.",
"safetyCodeTitle": "Sicherheitscode mit {name}",
"safetyCodeHowTo": "Vergleich ihn mit dem Code, den {name} für dich sieht, persönlich oder bei einem Anruf. Stimmen sie überein, steht niemand zwischen euch, auch nicht deine Instanz.",
"safetyCodeChanged": "Die Schlüssel von {name} haben sich geändert, seit dieses Gerät sie zuletzt gesehen hat. Das passiert nach einem neuen Passwort ohne Wiederherstellungsphrase, oder wenn sich jemand dazwischen stellt. Vergleich den Code, bevor du ihnen vertraust.",
"safetyCodeMarkCompared": "Als verglichen markieren",
"safetyCodeTrustNew": "Den neuen Schlüsseln vertrauen",
"studysetViewOnly": "Du kannst es ansehen und lernen, aber nicht ändern.",
"studysetViewOnlyRefused": "Dieses Lernset kannst du nur ansehen."
}