feat(studyset): make a studyset private or not, and what a locked one shows (ADR 0019)
- A top-level studyset's options make it private, with everything inside it, or non-private again, after a dialog saying what changes and that the instance's backups keep readable copies until they expire; a device without the account's keys says how to get them there. - A locked studyset (its key doesn't open here) is titled Locked, says why when opened, and offers only Delete. - Publishing names the person's tags as the device reads them, and says what to do when the studyset is private or a tag has no name. - The export sheet says an archive is readable by whoever has the file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
2f169ae899
commit
0e10afcc68
5 changed files with 572 additions and 9 deletions
|
|
@ -2060,5 +2060,24 @@
|
|||
"watchStretchSearch": "Auf {site} suchen",
|
||||
"watchTapAWord": "Tipp auf ein Wort der Untertitel, um es nachzuschlagen, oder zieh über Zeichen, um einen beliebigen Teil einer Zeile nachzuschlagen (auf einem Touchscreen erst gedrückt halten).",
|
||||
"watchFormOf": "Eine Form von {word}",
|
||||
"watchFailed": "Das Video konnte nicht abgespielt werden."
|
||||
"watchFailed": "Das Video konnte nicht abgespielt werden.",
|
||||
|
||||
"publishPrivateRefused": "Es ist privat: Nur deine Geräte können es lesen. Mach es zuerst in seinem Menü nicht mehr privat.",
|
||||
"publishTagNames": "Nicht alle seine Tags ließen sich benennen. Synchronisiere und versuche es noch einmal.",
|
||||
"studysetMenuMakePrivate": "Privat machen",
|
||||
"studysetMenuMakeReadable": "Nicht mehr privat",
|
||||
"studysetPrivateTitle": "„{title}“ privat machen?",
|
||||
"studysetPrivateBody": "Alles darin wird auf deinen Geräten Ende-zu-Ende-verschlüsselt: Die Instanz kann es weder lesen noch veröffentlichen noch Claude zeigen. Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.",
|
||||
"studysetReadableTitle": "„{title}“ nicht mehr privat?",
|
||||
"studysetReadableBody": "Alles darin wird entschlüsselt und neu synchronisiert, sodass die Instanz es lesen kann: Du kannst es veröffentlichen, und Claude kann es über den Connector lesen.",
|
||||
"studysetPrivateNoKeys": "Melde dich auf diesem Gerät mit deinem Passwort an, um Lernsets privat zu machen.",
|
||||
"studysetPrivateSomeLocked": "Manches darin ließ sich auf diesem Gerät nicht öffnen und blieb, wie es war.",
|
||||
"studysetPrivateLabel": "Privat",
|
||||
"studysetLockedTitle": "Gesperrt",
|
||||
"studysetLockedBody": "Dieses Lernset ist privat, und sein Schlüssel öffnet sich auf diesem Gerät nicht: Es wurde mit Schlüsseln verschlüsselt, die dein Konto nicht mehr hat. Es lässt sich nur noch löschen.",
|
||||
"libraryOfferPrivateTitle": "Deine Lernsets privat machen?",
|
||||
"libraryOfferPrivateBody": "Neue Lernsets sind privat: Ende-zu-Ende-verschlüsselt, sodass nur deine Geräte sie lesen können. Die, die du vorher gemacht hast, bleiben für die Instanz lesbar, bis du sie auch privat machst. Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.",
|
||||
"libraryOfferPrivateAction": "Alle privat machen",
|
||||
"libraryOfferPrivateLater": "Jetzt nicht",
|
||||
"exportReadableNote": "Das Archiv ist nicht verschlüsselt: Wer die Datei hat, kann es lesen."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2424,5 +2424,26 @@
|
|||
"watchTapAWord": "Tap a word of the subtitles to look it up, or drag across characters to look up any part of a line (on a touch screen, hold first).",
|
||||
"watchFormOf": "A form of {word}",
|
||||
"@watchFormOf": {"placeholders": {"word": {"type": "String"}}},
|
||||
"watchFailed": "The video couldn't be played."
|
||||
"watchFailed": "The video couldn't be played.",
|
||||
|
||||
"publishPrivateRefused": "It's private: only your devices can read it. Make it non-private first, in its menu.",
|
||||
"publishTagNames": "Its tags couldn't all be named. Sync, then try again.",
|
||||
"studysetMenuMakePrivate": "Make private",
|
||||
"studysetMenuMakeReadable": "Make non-private",
|
||||
"studysetPrivateTitle": "Make “{title}” private?",
|
||||
"@studysetPrivateTitle": {"placeholders": {"title": {"type": "String"}}},
|
||||
"studysetPrivateBody": "Everything in it is end-to-end encrypted on your devices: the instance can't read it, publish it or show it to Claude. Copies in the instance's backups stay readable until those expire.",
|
||||
"studysetReadableTitle": "Make “{title}” non-private?",
|
||||
"@studysetReadableTitle": {"placeholders": {"title": {"type": "String"}}},
|
||||
"studysetReadableBody": "Everything in it is decrypted and synced again, so the instance can read it: you can publish it, and Claude can read it through the connector.",
|
||||
"studysetPrivateNoKeys": "Sign in with your password on this device to make studysets private.",
|
||||
"studysetPrivateSomeLocked": "Some of it couldn't be opened on this device and stayed as it was.",
|
||||
"studysetPrivateLabel": "Private",
|
||||
"studysetLockedTitle": "Locked",
|
||||
"studysetLockedBody": "This studyset is private, and its key doesn't open on this device: it was encrypted with keys your account no longer has. It can only be deleted.",
|
||||
"libraryOfferPrivateTitle": "Make your studysets private?",
|
||||
"libraryOfferPrivateBody": "New studysets are private: end-to-end encrypted, so only your devices can read them. Those you made before stay readable by the instance until you make them private too. Copies in the instance's backups stay readable until those expire.",
|
||||
"libraryOfferPrivateAction": "Make all private",
|
||||
"libraryOfferPrivateLater": "Not now",
|
||||
"exportReadableNote": "The archive isn't encrypted: whoever has the file can read it."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12158,6 +12158,114 @@ abstract class AppLocalizations {
|
|||
/// In en, this message translates to:
|
||||
/// **'The video couldn\'t be played.'**
|
||||
String get watchFailed;
|
||||
|
||||
/// No description provided for @publishPrivateRefused.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'It\'s private: only your devices can read it. Make it non-private first, in its menu.'**
|
||||
String get publishPrivateRefused;
|
||||
|
||||
/// No description provided for @publishTagNames.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Its tags couldn\'t all be named. Sync, then try again.'**
|
||||
String get publishTagNames;
|
||||
|
||||
/// No description provided for @studysetMenuMakePrivate.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make private'**
|
||||
String get studysetMenuMakePrivate;
|
||||
|
||||
/// No description provided for @studysetMenuMakeReadable.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make non-private'**
|
||||
String get studysetMenuMakeReadable;
|
||||
|
||||
/// No description provided for @studysetPrivateTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make “{title}” private?'**
|
||||
String studysetPrivateTitle(String title);
|
||||
|
||||
/// No description provided for @studysetPrivateBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Everything in it is end-to-end encrypted on your devices: the instance can\'t read it, publish it or show it to Claude. Copies in the instance\'s backups stay readable until those expire.'**
|
||||
String get studysetPrivateBody;
|
||||
|
||||
/// No description provided for @studysetReadableTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make “{title}” non-private?'**
|
||||
String studysetReadableTitle(String title);
|
||||
|
||||
/// No description provided for @studysetReadableBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Everything in it is decrypted and synced again, so the instance can read it: you can publish it, and Claude can read it through the connector.'**
|
||||
String get studysetReadableBody;
|
||||
|
||||
/// No description provided for @studysetPrivateNoKeys.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Sign in with your password on this device to make studysets private.'**
|
||||
String get studysetPrivateNoKeys;
|
||||
|
||||
/// No description provided for @studysetPrivateSomeLocked.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Some of it couldn\'t be opened on this device and stayed as it was.'**
|
||||
String get studysetPrivateSomeLocked;
|
||||
|
||||
/// No description provided for @studysetPrivateLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Private'**
|
||||
String get studysetPrivateLabel;
|
||||
|
||||
/// No description provided for @studysetLockedTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Locked'**
|
||||
String get studysetLockedTitle;
|
||||
|
||||
/// No description provided for @studysetLockedBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This studyset is private, and its key doesn\'t open on this device: it was encrypted with keys your account no longer has. It can only be deleted.'**
|
||||
String get studysetLockedBody;
|
||||
|
||||
/// No description provided for @libraryOfferPrivateTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make your studysets private?'**
|
||||
String get libraryOfferPrivateTitle;
|
||||
|
||||
/// No description provided for @libraryOfferPrivateBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'New studysets are private: end-to-end encrypted, so only your devices can read them. Those you made before stay readable by the instance until you make them private too. Copies in the instance\'s backups stay readable until those expire.'**
|
||||
String get libraryOfferPrivateBody;
|
||||
|
||||
/// No description provided for @libraryOfferPrivateAction.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make all private'**
|
||||
String get libraryOfferPrivateAction;
|
||||
|
||||
/// No description provided for @libraryOfferPrivateLater.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Not now'**
|
||||
String get libraryOfferPrivateLater;
|
||||
|
||||
/// No description provided for @exportReadableNote.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The archive isn\'t encrypted: whoever has the file can read it.'**
|
||||
String get exportReadableNote;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
|
|
|||
|
|
@ -7705,4 +7705,71 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
|
||||
@override
|
||||
String get watchFailed => 'Das Video konnte nicht abgespielt werden.';
|
||||
|
||||
@override
|
||||
String get publishPrivateRefused =>
|
||||
'Es ist privat: Nur deine Geräte können es lesen. Mach es zuerst in seinem Menü nicht mehr privat.';
|
||||
|
||||
@override
|
||||
String get publishTagNames =>
|
||||
'Nicht alle seine Tags ließen sich benennen. Synchronisiere und versuche es noch einmal.';
|
||||
|
||||
@override
|
||||
String get studysetMenuMakePrivate => 'Privat machen';
|
||||
|
||||
@override
|
||||
String get studysetMenuMakeReadable => 'Nicht mehr privat';
|
||||
|
||||
@override
|
||||
String studysetPrivateTitle(String title) {
|
||||
return '„$title“ privat machen?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get studysetPrivateBody =>
|
||||
'Alles darin wird auf deinen Geräten Ende-zu-Ende-verschlüsselt: Die Instanz kann es weder lesen noch veröffentlichen noch Claude zeigen. Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.';
|
||||
|
||||
@override
|
||||
String studysetReadableTitle(String title) {
|
||||
return '„$title“ nicht mehr privat?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get studysetReadableBody =>
|
||||
'Alles darin wird entschlüsselt und neu synchronisiert, sodass die Instanz es lesen kann: Du kannst es veröffentlichen, und Claude kann es über den Connector lesen.';
|
||||
|
||||
@override
|
||||
String get studysetPrivateNoKeys =>
|
||||
'Melde dich auf diesem Gerät mit deinem Passwort an, um Lernsets privat zu machen.';
|
||||
|
||||
@override
|
||||
String get studysetPrivateSomeLocked =>
|
||||
'Manches darin ließ sich auf diesem Gerät nicht öffnen und blieb, wie es war.';
|
||||
|
||||
@override
|
||||
String get studysetPrivateLabel => 'Privat';
|
||||
|
||||
@override
|
||||
String get studysetLockedTitle => 'Gesperrt';
|
||||
|
||||
@override
|
||||
String get studysetLockedBody =>
|
||||
'Dieses Lernset ist privat, und sein Schlüssel öffnet sich auf diesem Gerät nicht: Es wurde mit Schlüsseln verschlüsselt, die dein Konto nicht mehr hat. Es lässt sich nur noch löschen.';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateTitle => 'Deine Lernsets privat machen?';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateBody =>
|
||||
'Neue Lernsets sind privat: Ende-zu-Ende-verschlüsselt, sodass nur deine Geräte sie lesen können. Die, die du vorher gemacht hast, bleiben für die Instanz lesbar, bis du sie auch privat machst. Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateAction => 'Alle privat machen';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateLater => 'Jetzt nicht';
|
||||
|
||||
@override
|
||||
String get exportReadableNote =>
|
||||
'Das Archiv ist nicht verschlüsselt: Wer die Datei hat, kann es lesen.';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7633,6 +7633,73 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
|
||||
@override
|
||||
String get watchFailed => 'The video couldn\'t be played.';
|
||||
|
||||
@override
|
||||
String get publishPrivateRefused =>
|
||||
'It\'s private: only your devices can read it. Make it non-private first, in its menu.';
|
||||
|
||||
@override
|
||||
String get publishTagNames =>
|
||||
'Its tags couldn\'t all be named. Sync, then try again.';
|
||||
|
||||
@override
|
||||
String get studysetMenuMakePrivate => 'Make private';
|
||||
|
||||
@override
|
||||
String get studysetMenuMakeReadable => 'Make non-private';
|
||||
|
||||
@override
|
||||
String studysetPrivateTitle(String title) {
|
||||
return 'Make “$title” private?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get studysetPrivateBody =>
|
||||
'Everything in it is end-to-end encrypted on your devices: the instance can\'t read it, publish it or show it to Claude. Copies in the instance\'s backups stay readable until those expire.';
|
||||
|
||||
@override
|
||||
String studysetReadableTitle(String title) {
|
||||
return 'Make “$title” non-private?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get studysetReadableBody =>
|
||||
'Everything in it is decrypted and synced again, so the instance can read it: you can publish it, and Claude can read it through the connector.';
|
||||
|
||||
@override
|
||||
String get studysetPrivateNoKeys =>
|
||||
'Sign in with your password on this device to make studysets private.';
|
||||
|
||||
@override
|
||||
String get studysetPrivateSomeLocked =>
|
||||
'Some of it couldn\'t be opened on this device and stayed as it was.';
|
||||
|
||||
@override
|
||||
String get studysetPrivateLabel => 'Private';
|
||||
|
||||
@override
|
||||
String get studysetLockedTitle => 'Locked';
|
||||
|
||||
@override
|
||||
String get studysetLockedBody =>
|
||||
'This studyset is private, and its key doesn\'t open on this device: it was encrypted with keys your account no longer has. It can only be deleted.';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateTitle => 'Make your studysets private?';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateBody =>
|
||||
'New studysets are private: end-to-end encrypted, so only your devices can read them. Those you made before stay readable by the instance until you make them private too. Copies in the instance\'s backups stay readable until those expire.';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateAction => 'Make all private';
|
||||
|
||||
@override
|
||||
String get libraryOfferPrivateLater => 'Not now';
|
||||
|
||||
@override
|
||||
String get exportReadableNote =>
|
||||
'The archive isn\'t encrypted: whoever has the file can read it.';
|
||||
}
|
||||
|
||||
/// The translations for English, as used in the United Kingdom (`en_GB`).
|
||||
|
|
|
|||
Loading…
Reference in a new issue