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
290
packages/halkyon_app/lib/l10n/halkyon_app_localizations_de.dart
Normal file
290
packages/halkyon_app/lib/l10n/halkyon_app_localizations_de.dart
Normal file
|
|
@ -0,0 +1,290 @@
|
|||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
|
||||
import 'halkyon_app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for German (`de`).
|
||||
class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
|
||||
HalkyonAppLocalizationsDe([String locale = 'de']) : super(locale);
|
||||
|
||||
@override
|
||||
String get tryAgain => 'Erneut versuchen';
|
||||
|
||||
@override
|
||||
String instanceWelcome(String app) {
|
||||
return 'Willkommen bei $app';
|
||||
}
|
||||
|
||||
@override
|
||||
String get instanceBuiltInTagline => 'In der App voreingestellt';
|
||||
|
||||
@override
|
||||
String get instanceAnother => 'Andere Instanz';
|
||||
|
||||
@override
|
||||
String get instanceAnotherTagline => 'Gib ihre Adresse ein';
|
||||
|
||||
@override
|
||||
String get instanceAddress => 'Adresse der Instanz';
|
||||
|
||||
@override
|
||||
String get instanceAddressInvalid => 'Das ist keine Adresse.';
|
||||
|
||||
@override
|
||||
String get instanceAddressRequired => 'Gib die Adresse einer Instanz ein.';
|
||||
|
||||
@override
|
||||
String get instanceContinue => 'Weiter';
|
||||
|
||||
@override
|
||||
String instanceUnreachable(String app, String name) {
|
||||
return 'Unter $name antwortet keine Instanz von $app.';
|
||||
}
|
||||
|
||||
@override
|
||||
String instanceUseBuiltIn(String name) {
|
||||
return '$name verwenden';
|
||||
}
|
||||
|
||||
@override
|
||||
String instanceOpenFailed(String name) {
|
||||
return 'Die App auf $name konnte nicht geöffnet werden.';
|
||||
}
|
||||
|
||||
@override
|
||||
String instanceDataAndBackupsIn(String place) {
|
||||
return 'Daten und Sicherungen: $place';
|
||||
}
|
||||
|
||||
@override
|
||||
String instanceDataIn(String place) {
|
||||
return 'Daten: $place';
|
||||
}
|
||||
|
||||
@override
|
||||
String instanceBackupsIn(String place) {
|
||||
return 'Sicherungen: $place';
|
||||
}
|
||||
|
||||
@override
|
||||
String get instanceNoBackups => 'Keine Sicherungen';
|
||||
|
||||
@override
|
||||
String get instanceEuropeanUnion => 'Europäische Union';
|
||||
|
||||
@override
|
||||
String get accountsTitle => 'Konten';
|
||||
|
||||
@override
|
||||
String get accountAdd => 'Konto hinzufügen';
|
||||
|
||||
@override
|
||||
String get accountAddSubtitle =>
|
||||
'Wähle die Instanz für das Konto, das du hinzufügst.';
|
||||
|
||||
@override
|
||||
String get accountSignedIn => 'Angemeldet';
|
||||
|
||||
@override
|
||||
String get accountAnonymous => 'Anonym';
|
||||
|
||||
@override
|
||||
String get accountRemoveTooltip => 'Konto entfernen';
|
||||
|
||||
@override
|
||||
String get accountRemoveTitle => 'Konto entfernen?';
|
||||
|
||||
@override
|
||||
String accountRemoveMessage(String name) {
|
||||
return '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.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get accountRemoveConfirm => 'Entfernen';
|
||||
|
||||
@override
|
||||
String get sessionUnreachable => 'Der Server war nicht erreichbar.';
|
||||
|
||||
@override
|
||||
String get personDataFailed =>
|
||||
'Die Daten dieses Geräts konnten nicht geöffnet werden.';
|
||||
|
||||
@override
|
||||
String get startSignedOut => 'Abgemeldet';
|
||||
|
||||
@override
|
||||
String startOn(String instance) {
|
||||
return 'Starte auf $instance:';
|
||||
}
|
||||
|
||||
@override
|
||||
String get startWithGitHub => 'Mit GitHub anmelden';
|
||||
|
||||
@override
|
||||
String get startWithEmail => 'Mit E-Mail fortfahren';
|
||||
|
||||
@override
|
||||
String get startWithoutAccount => 'Ohne Konto starten';
|
||||
|
||||
@override
|
||||
String get startAnonymous =>
|
||||
'Dein Fortschritt wird auf diesem Gerät gespeichert. Melde dich an, um ihn zu behalten.';
|
||||
|
||||
@override
|
||||
String get startGitHubFailed => 'Anmeldung mit GitHub fehlgeschlagen.';
|
||||
|
||||
@override
|
||||
String get startNoGitHubAccount =>
|
||||
'Noch kein Konto hier meldet sich mit diesem GitHub-Konto an. Starte ohne Konto und füge GitHub dann im Profil hinzu.';
|
||||
|
||||
@override
|
||||
String get startOtherInstance => 'Andere Instanz verwenden';
|
||||
|
||||
@override
|
||||
String get emailSignInTitle => 'Mit E-Mail fortfahren';
|
||||
|
||||
@override
|
||||
String get 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.';
|
||||
|
||||
@override
|
||||
String get emailSignInAddress => 'E-Mail-Adresse';
|
||||
|
||||
@override
|
||||
String get emailSignInSend => 'Code senden';
|
||||
|
||||
@override
|
||||
String emailSignInCodeSent(String address) {
|
||||
return 'Wir haben einen Code an $address geschickt. Er gilt 15 Minuten.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get emailSignInResent => 'Ein neuer Code ist unterwegs.';
|
||||
|
||||
@override
|
||||
String get emailSignInCode => 'Code';
|
||||
|
||||
@override
|
||||
String get emailSignInContinue => 'Weiter';
|
||||
|
||||
@override
|
||||
String get emailSignInResend => 'Neuen Code senden';
|
||||
|
||||
@override
|
||||
String get emailSignInOtherAddress => 'Andere Adresse verwenden';
|
||||
|
||||
@override
|
||||
String emailSignInSwitchTitle(String address) {
|
||||
return 'Zum Konto von $address wechseln?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get emailSignInSwitchConfirm => 'Wechseln';
|
||||
|
||||
@override
|
||||
String get emailSignInSwitchStay => 'Anonym bleiben';
|
||||
|
||||
@override
|
||||
String emailSignInTaken(String address) {
|
||||
return 'Mit $address meldet sich schon ein anderes Konto an. Um zu ihm zu wechseln, melde dich zuerst ab.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get emailSignInUnavailable =>
|
||||
'Diese Instanz bietet keine Anmeldung mit E-Mail an.';
|
||||
|
||||
@override
|
||||
String get emailSignInNotAnAddress => 'Das ist keine E-Mail-Adresse.';
|
||||
|
||||
@override
|
||||
String get emailSignInTooManyCodes =>
|
||||
'Zu viele Codes in der letzten Stunde. Versuche es später noch einmal.';
|
||||
|
||||
@override
|
||||
String get emailSignInWrongCode => 'Dieser Code stimmt nicht.';
|
||||
|
||||
@override
|
||||
String get emailSignInTooManyTries =>
|
||||
'Zu viele falsche Codes. Fordere einen neuen an.';
|
||||
|
||||
@override
|
||||
String get emailSignInCodeExpired =>
|
||||
'Dieser Code gilt nicht mehr. Fordere einen neuen an.';
|
||||
|
||||
@override
|
||||
String get emailSignInOtherAddressLinked =>
|
||||
'Du meldest dich schon mit einer anderen Adresse an.';
|
||||
|
||||
@override
|
||||
String get emailSignInMailFailed =>
|
||||
'Die Instanz konnte die Mail nicht senden. Versuche es später noch einmal.';
|
||||
|
||||
@override
|
||||
String get emailSignInFailed =>
|
||||
'Die Instanz war nicht erreichbar. Versuche es noch einmal.';
|
||||
|
||||
@override
|
||||
String get syncTitle => 'Synchronisierung';
|
||||
|
||||
@override
|
||||
String get syncNow => 'Jetzt synchronisieren';
|
||||
|
||||
@override
|
||||
String get syncStateSyncing => 'Wird synchronisiert…';
|
||||
|
||||
@override
|
||||
String get syncStateSynced => 'Alles synchronisiert';
|
||||
|
||||
@override
|
||||
String get syncStateFailing => 'Synchronisierung schlägt fehl';
|
||||
|
||||
@override
|
||||
String get syncStateNotYet => 'Noch nicht synchronisiert';
|
||||
|
||||
@override
|
||||
String syncStateMismatch(String server) {
|
||||
return 'Diese App kann nicht mit $server synchronisieren';
|
||||
}
|
||||
|
||||
@override
|
||||
String get 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.';
|
||||
|
||||
@override
|
||||
String syncLastCompleted(String time) {
|
||||
return 'Zuletzt abgeschlossen um $time';
|
||||
}
|
||||
|
||||
@override
|
||||
String syncLastFailed(String time) {
|
||||
return 'Letzter Versuch fehlgeschlagen um $time';
|
||||
}
|
||||
|
||||
@override
|
||||
String get syncNoRunYet =>
|
||||
'Seit dem Start der App wurde noch keine Synchronisierung abgeschlossen';
|
||||
|
||||
@override
|
||||
String syncPending(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: '$count Änderungen warten auf die Synchronisierung',
|
||||
one: '1 Änderung wartet auf die Synchronisierung',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String get syncTroubleLabel => 'Synchronisierung benötigt Aufmerksamkeit';
|
||||
|
||||
@override
|
||||
String syncMismatchBanner(String server) {
|
||||
return 'Diese App kann nicht mehr mit $server synchronisieren. Aktualisiere sie, um weiter zu synchronisieren.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get syncMismatchMore => 'Mehr';
|
||||
}
|
||||
Loading…
Reference in a new issue