halkyon_app: instances, sign-in and sync plumbing for Halkyon's apps
What every Halkyon app's shell needs, taken from Halkyon Learn's and set on halkyon_base's client: the instances a device keeps an account on, the first start's tiles and where an instance keeps people's data, the account switcher; signing in anonymously, with GitHub or an email code, switching person and the start screen; the gates that build an app's dependencies per instance and per person; and the sync service with its status, Settings card and banner. Texts of its own in English and German take the app's name; what only the app can say, it passes in. Fakes for apps' tests are in testing.dart. An instance's basics now name the app it serves (`app`, set by the host's configuration), and an app accepts only an instance of its own. SerialQueue and CoalescingRunner move into halkyon_core. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
af1de799f4
commit
e23cc77f7c
1 changed files with 10761 additions and 10 deletions
78
packages/halkyon_app/lib/l10n/halkyon_app_de.arb
Normal file
78
packages/halkyon_app/lib/l10n/halkyon_app_de.arb
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
{
|
||||
"@@locale": "de",
|
||||
"tryAgain": "Erneut versuchen",
|
||||
"instanceWelcome": "Willkommen bei {app}",
|
||||
"instanceBuiltInTagline": "In der App voreingestellt",
|
||||
"instanceAnother": "Andere Instanz",
|
||||
"instanceAnotherTagline": "Gib ihre Adresse ein",
|
||||
"instanceAddress": "Adresse der Instanz",
|
||||
"instanceAddressInvalid": "Das ist keine Adresse.",
|
||||
"instanceAddressRequired": "Gib die Adresse einer Instanz ein.",
|
||||
"instanceContinue": "Weiter",
|
||||
"instanceUnreachable": "Unter {name} antwortet keine Instanz von {app}.",
|
||||
"instanceUseBuiltIn": "{name} verwenden",
|
||||
"instanceOpenFailed": "Die App auf {name} konnte nicht geöffnet werden.",
|
||||
"instanceDataAndBackupsIn": "Daten und Sicherungen: {place}",
|
||||
"instanceDataIn": "Daten: {place}",
|
||||
"instanceBackupsIn": "Sicherungen: {place}",
|
||||
"instanceNoBackups": "Keine Sicherungen",
|
||||
"instanceEuropeanUnion": "Europäische Union",
|
||||
"accountsTitle": "Konten",
|
||||
"accountAdd": "Konto hinzufügen",
|
||||
"accountAddSubtitle": "Wähle die Instanz für das Konto, das du hinzufügst.",
|
||||
"accountSignedIn": "Angemeldet",
|
||||
"accountAnonymous": "Anonym",
|
||||
"accountRemoveTooltip": "Konto entfernen",
|
||||
"accountRemoveTitle": "Konto entfernen?",
|
||||
"accountRemoveMessage": "Entfernt das Konto auf {name} von diesem Gerät, mit allem, was das Gerät davon hat. Was es synchronisiert hat, bleibt auf {name}: Melde dich dort wieder an, um es wiederzuhaben. In ein anonymes Konto kann man sich nicht wieder anmelden.",
|
||||
"accountRemoveConfirm": "Entfernen",
|
||||
"sessionUnreachable": "Der Server war nicht erreichbar.",
|
||||
"personDataFailed": "Die Daten dieses Geräts konnten nicht geöffnet werden.",
|
||||
"startSignedOut": "Abgemeldet",
|
||||
"startOn": "Starte auf {instance}:",
|
||||
"startWithGitHub": "Mit GitHub anmelden",
|
||||
"startWithEmail": "Mit E-Mail fortfahren",
|
||||
"startWithoutAccount": "Ohne Konto starten",
|
||||
"startAnonymous": "Dein Fortschritt wird auf diesem Gerät gespeichert. Melde dich an, um ihn zu behalten.",
|
||||
"startGitHubFailed": "Anmeldung mit GitHub fehlgeschlagen.",
|
||||
"startNoGitHubAccount": "Noch kein Konto hier meldet sich mit diesem GitHub-Konto an. Starte ohne Konto und füge GitHub dann im Profil hinzu.",
|
||||
"startOtherInstance": "Andere Instanz verwenden",
|
||||
"emailSignInTitle": "Mit E-Mail fortfahren",
|
||||
"emailSignInIntro": "Wir schicken dir einen Code zum Anmelden. Diese Instanz behält nur einen Fingerabdruck deiner Adresse, nie die Adresse selbst, und schreibt ihr nur, wenn du einen Code anforderst.",
|
||||
"emailSignInAddress": "E-Mail-Adresse",
|
||||
"emailSignInSend": "Code senden",
|
||||
"emailSignInCodeSent": "Wir haben einen Code an {address} geschickt. Er gilt 15 Minuten.",
|
||||
"emailSignInResent": "Ein neuer Code ist unterwegs.",
|
||||
"emailSignInCode": "Code",
|
||||
"emailSignInContinue": "Weiter",
|
||||
"emailSignInResend": "Neuen Code senden",
|
||||
"emailSignInOtherAddress": "Andere Adresse verwenden",
|
||||
"emailSignInSwitchTitle": "Zum Konto von {address} wechseln?",
|
||||
"emailSignInSwitchConfirm": "Wechseln",
|
||||
"emailSignInSwitchStay": "Anonym bleiben",
|
||||
"emailSignInTaken": "Mit {address} meldet sich schon ein anderes Konto an. Um zu ihm zu wechseln, melde dich zuerst ab.",
|
||||
"emailSignInUnavailable": "Diese Instanz bietet keine Anmeldung mit E-Mail an.",
|
||||
"emailSignInNotAnAddress": "Das ist keine E-Mail-Adresse.",
|
||||
"emailSignInTooManyCodes": "Zu viele Codes in der letzten Stunde. Versuche es später noch einmal.",
|
||||
"emailSignInWrongCode": "Dieser Code stimmt nicht.",
|
||||
"emailSignInTooManyTries": "Zu viele falsche Codes. Fordere einen neuen an.",
|
||||
"emailSignInCodeExpired": "Dieser Code gilt nicht mehr. Fordere einen neuen an.",
|
||||
"emailSignInOtherAddressLinked": "Du meldest dich schon mit einer anderen Adresse an.",
|
||||
"emailSignInMailFailed": "Die Instanz konnte die Mail nicht senden. Versuche es später noch einmal.",
|
||||
"emailSignInFailed": "Die Instanz war nicht erreichbar. Versuche es noch einmal.",
|
||||
"syncTitle": "Synchronisierung",
|
||||
"syncNow": "Jetzt synchronisieren",
|
||||
"syncStateSyncing": "Wird synchronisiert…",
|
||||
"syncStateSynced": "Alles synchronisiert",
|
||||
"syncStateFailing": "Synchronisierung schlägt fehl",
|
||||
"syncStateNotYet": "Noch nicht synchronisiert",
|
||||
"syncStateMismatch": "Diese App kann nicht mit {server} synchronisieren",
|
||||
"syncMismatchDetail": "Aktualisiere die App. Ist sie schon aktuell, muss der Server aktualisiert werden. Was du bis dahin tust, bleibt auf diesem Gerät und wird danach synchronisiert.",
|
||||
"syncLastCompleted": "Zuletzt abgeschlossen um {time}",
|
||||
"syncLastFailed": "Letzter Versuch fehlgeschlagen um {time}",
|
||||
"syncNoRunYet": "Seit dem Start der App wurde noch keine Synchronisierung abgeschlossen",
|
||||
"syncPending": "{count, plural, =1{1 Änderung wartet auf die Synchronisierung} other{{count} Änderungen warten auf die Synchronisierung}}",
|
||||
"syncTroubleLabel": "Synchronisierung benötigt Aufmerksamkeit",
|
||||
"syncMismatchBanner": "Diese App kann nicht mehr mit {server} synchronisieren. Aktualisiere sie, um weiter zu synchronisieren.",
|
||||
"syncMismatchMore": "Mehr"
|
||||
}
|
||||
Reference in a new issue