Whoever operates the instance approves, refuses and suspends accounts
and names other operators in the app (D21 to D24, D34):
- halkyon_app: InstanceOperatorRepository on
ServerpodInstanceOperatorGateway (the module's instanceOperator
endpoint; refusals as OperatorFailed: notFound, isOperator,
lastOperator, notAllowed for 401 and 403, failed), in AppDependencies.
OperatingCubit counts the accounts that wait: asked as the person's
app opens, after every change, and every 5 minutes only while they
operate the instance, so nobody else's app keeps asking.
InstanceOperatorCard (or its tiles) and WaitingAccountsBadge show
nothing at all for anyone else. InstanceOperatorScreen, laid out as
Settings: the accounts that wait, each showing its four words to read
out before Approve (D33), Refuse for new ones after asking; who
operates, Take back after asking, the last always kept; Name an
operator by handle; Find an account by the start of its handle, with
Suspend after asking and Name as operator. English and German texts
("Admin" as the role word in German).
- Learn: the card right after the Sync card in Settings, which the
cogs' count leads to as their dot leads to Sync; the count on the
Settings cogs of Home and Profile.
- Todo: the tiles in the account sheet and the count on its button.
Todo's server is a member, whose `operating()` is always null, so
nothing shows there until it holds the register.
Tests: the gateway's mapping, the repository, both cubits with their
denials, the card, the badge and the screen; Learn's Settings shows the
card and the count to an operator and neither to anyone else.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
1296 lines
38 KiB
Dart
1296 lines
38 KiB
Dart
// ignore: unused_import
|
|
import 'package:intl/intl.dart' as intl;
|
|
|
|
import 'halkyon_app_localizations.dart';
|
|
|
|
// ignore_for_file: type=lint
|
|
|
|
/// The translations for English (`en`).
|
|
class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
|
|
HalkyonAppLocalizationsEn([String locale = 'en']) : super(locale);
|
|
|
|
@override
|
|
String get tryAgain => 'Try again';
|
|
|
|
@override
|
|
String instanceWelcome(String app) {
|
|
return 'Welcome to $app';
|
|
}
|
|
|
|
@override
|
|
String get instanceBuiltInTagline => 'Comes with the app';
|
|
|
|
@override
|
|
String get instanceAnother => 'Another instance';
|
|
|
|
@override
|
|
String get instanceAnotherTagline => 'Enter its address';
|
|
|
|
@override
|
|
String get instanceAddress => 'Instance address';
|
|
|
|
@override
|
|
String get instanceAddressInvalid => 'This isn\'t an address.';
|
|
|
|
@override
|
|
String instanceAddressInsecure(String app) {
|
|
return '$app reaches instances over HTTPS only, so that nobody on the way reads or changes what it sends. Ask for the instance\'s HTTPS address.';
|
|
}
|
|
|
|
@override
|
|
String instanceInsecure(String name, String app) {
|
|
return '$name is reached over plain HTTP, where anyone on the way could read and change what $app sends, so $app no longer opens it. Its account stays on $name and on this device. Use another instance, or remove it from this device.';
|
|
}
|
|
|
|
@override
|
|
String get instanceInsecureUseAnother => 'Use another instance';
|
|
|
|
@override
|
|
String get instanceInsecureRemove => 'Remove from this device';
|
|
|
|
@override
|
|
String get instanceAddressRequired => 'Enter the address of an instance.';
|
|
|
|
@override
|
|
String get instanceContinue => 'Continue';
|
|
|
|
@override
|
|
String instanceUnreachable(String app, String name) {
|
|
return 'No instance of $app answers at $name.';
|
|
}
|
|
|
|
@override
|
|
String instanceUseBuiltIn(String name) {
|
|
return 'Use $name';
|
|
}
|
|
|
|
@override
|
|
String instanceOpenFailed(String name) {
|
|
return 'Couldn\'t open the app on $name.';
|
|
}
|
|
|
|
@override
|
|
String instanceDataAndBackupsIn(String place) {
|
|
return 'Data and backups: $place';
|
|
}
|
|
|
|
@override
|
|
String instanceDataIn(String place) {
|
|
return 'Data: $place';
|
|
}
|
|
|
|
@override
|
|
String instanceBackupsIn(String place) {
|
|
return 'Backups: $place';
|
|
}
|
|
|
|
@override
|
|
String get instanceNoBackups => 'No backups';
|
|
|
|
@override
|
|
String get instanceEuropeanUnion => 'European Union';
|
|
|
|
@override
|
|
String instanceCountryInEu(String country) {
|
|
return '$country (EU)';
|
|
}
|
|
|
|
@override
|
|
String instanceSubdivisionOf(String subdivision, String country) {
|
|
return '$subdivision, $country';
|
|
}
|
|
|
|
@override
|
|
String get accountsTitle => 'Accounts';
|
|
|
|
@override
|
|
String get accountAdd => 'Add account';
|
|
|
|
@override
|
|
String get accountAddSubtitle =>
|
|
'Choose the instance for the account to add.';
|
|
|
|
@override
|
|
String get accountSignedIn => 'Signed in';
|
|
|
|
@override
|
|
String get accountRemoveTooltip => 'Remove account';
|
|
|
|
@override
|
|
String get accountRemoveTitle => 'Remove account?';
|
|
|
|
@override
|
|
String accountRemoveMessage(String name) {
|
|
return 'Removes the account on $name from this device, with all the device holds of it. What it synced stays on $name: sign in there again to have it.';
|
|
}
|
|
|
|
@override
|
|
String get accountRemoveConfirm => 'Remove';
|
|
|
|
@override
|
|
String accountSignedInOn(String instance) {
|
|
return 'Signed in on $instance';
|
|
}
|
|
|
|
@override
|
|
String get accountSwitch => 'Switch account';
|
|
|
|
@override
|
|
String get accountSignOut => 'Sign out';
|
|
|
|
@override
|
|
String get accountDelete => 'Delete account';
|
|
|
|
@override
|
|
String get accountDeleteTitle => 'Delete your account?';
|
|
|
|
@override
|
|
String get accountSignOutFailed =>
|
|
'Couldn\'t sign out on this device. Try again.';
|
|
|
|
@override
|
|
String get accountDeleteFailed =>
|
|
'Couldn\'t delete your account: the instance wasn\'t reached. Try again.';
|
|
|
|
@override
|
|
String get aboutSourceCode => 'The source of what this instance runs:';
|
|
|
|
@override
|
|
String get aboutSourceUnreachable =>
|
|
'Couldn\'t reach this instance to ask where its source is.';
|
|
|
|
@override
|
|
String get sessionUnreachable => 'Couldn\'t reach the server.';
|
|
|
|
@override
|
|
String get personDataFailed => 'Couldn\'t open this device\'s data.';
|
|
|
|
@override
|
|
String get startSignedOut => 'Signed out';
|
|
|
|
@override
|
|
String startOn(String instance) {
|
|
return 'Start on $instance:';
|
|
}
|
|
|
|
@override
|
|
String get startOtherInstance => 'Use another instance';
|
|
|
|
@override
|
|
String startNoWay(String instance) {
|
|
return '$instance offers no way to create an account.';
|
|
}
|
|
|
|
@override
|
|
String startSignUpsApproved(String instance) {
|
|
return 'New accounts on $instance wait until its operator approves them.';
|
|
}
|
|
|
|
@override
|
|
String startSignUpsClosed(String instance) {
|
|
return '$instance takes no new accounts: sign in with yours.';
|
|
}
|
|
|
|
@override
|
|
String get syncTitle => 'Sync';
|
|
|
|
@override
|
|
String get syncNow => 'Sync now';
|
|
|
|
@override
|
|
String get syncStateSyncing => 'Syncing…';
|
|
|
|
@override
|
|
String get syncStateSynced => 'Everything synced';
|
|
|
|
@override
|
|
String get syncStateFailing => 'Sync is failing';
|
|
|
|
@override
|
|
String get syncStateNotYet => 'Not synced yet';
|
|
|
|
@override
|
|
String syncStateMismatch(String server) {
|
|
return 'This app can\'t sync with $server';
|
|
}
|
|
|
|
@override
|
|
String get syncMismatchDetail =>
|
|
'Update the app. If it is up to date, the server needs an update. What you do meanwhile stays on this device and syncs afterwards.';
|
|
|
|
@override
|
|
String syncLastCompleted(String time) {
|
|
return 'Last completed at $time';
|
|
}
|
|
|
|
@override
|
|
String syncLastFailed(String time) {
|
|
return 'Last attempt failed at $time';
|
|
}
|
|
|
|
@override
|
|
String get syncNoRunYet => 'No sync has completed since the app started';
|
|
|
|
@override
|
|
String syncPending(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count changes wait to sync',
|
|
one: '1 change waits to sync',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get syncTroubleLabel => 'Sync needs attention';
|
|
|
|
@override
|
|
String syncMismatchBanner(String server) {
|
|
return 'This app can\'t sync with $server any more. Update it to keep syncing.';
|
|
}
|
|
|
|
@override
|
|
String get syncMismatchMore => 'More';
|
|
|
|
@override
|
|
String get startSignIn => 'Sign in';
|
|
|
|
@override
|
|
String get startCreateAccount => 'Create an account';
|
|
|
|
@override
|
|
String waitWaiting(String instance) {
|
|
return 'Your account waits until the operator of $instance approves it.';
|
|
}
|
|
|
|
@override
|
|
String waitSuspended(String instance) {
|
|
return 'The operator of $instance has suspended your account. Only they can lift it.';
|
|
}
|
|
|
|
@override
|
|
String waitApproved(String instance) {
|
|
return 'The operator of $instance has approved your account. Sign in once more, as you did before.';
|
|
}
|
|
|
|
@override
|
|
String waitEnded(String instance) {
|
|
return 'This sign-up has ended: the operator of $instance refused it, or it waited too long.';
|
|
}
|
|
|
|
@override
|
|
String get waitBack => 'Back to the start';
|
|
|
|
@override
|
|
String get waitMatchingCode => 'Matching code';
|
|
|
|
@override
|
|
String waitMatchingNote(String instance) {
|
|
return 'When the operator of $instance reads you four words, check that they are these. Never read them out yourself: Halkyon never asks anyone to.';
|
|
}
|
|
|
|
@override
|
|
String get waitCheckNow => 'Check now';
|
|
|
|
@override
|
|
String waitUnreachable(String instance) {
|
|
return '$instance couldn\'t be reached. It\'s asked again every 30 seconds.';
|
|
}
|
|
|
|
@override
|
|
String get waitDelete => 'Delete this account';
|
|
|
|
@override
|
|
String get waitDeleteTitle => 'Delete this account?';
|
|
|
|
@override
|
|
String get waitDeleteMessage =>
|
|
'It goes with everything it has, and nobody can sign in to it again.';
|
|
|
|
@override
|
|
String get waitDeleteFailed => 'Couldn\'t delete the account. Try again.';
|
|
|
|
@override
|
|
String get passwordAddress => 'Email address';
|
|
|
|
@override
|
|
String get passwordPassword => 'Password';
|
|
|
|
@override
|
|
String get passwordNewPassword => 'New password';
|
|
|
|
@override
|
|
String get passwordCurrent => 'Current password';
|
|
|
|
@override
|
|
String get passwordRepeat => 'New password again';
|
|
|
|
@override
|
|
String get passwordsDiffer => 'The two passwords differ.';
|
|
|
|
@override
|
|
String get passwordShow => 'Show password';
|
|
|
|
@override
|
|
String get passwordHide => 'Hide password';
|
|
|
|
@override
|
|
String get passwordContinue => 'Continue';
|
|
|
|
@override
|
|
String get passwordBack => 'Back';
|
|
|
|
@override
|
|
String get passwordDone => 'Done';
|
|
|
|
@override
|
|
String get passwordSave => 'Save as a file';
|
|
|
|
@override
|
|
String get passwordQrCode => 'QR code for your authenticator app';
|
|
|
|
@override
|
|
String get passwordMailCode => 'Code from the email';
|
|
|
|
@override
|
|
String passwordMailCodeSent(String address) {
|
|
return 'We emailed a code to $address. It\'s valid for 15 minutes.';
|
|
}
|
|
|
|
@override
|
|
String passwordHandleIntro(String address) {
|
|
return 'A code is on its way to $address. Meanwhile, choose your handle: others find you by it. It stays private until you publish something or fill in your profile, and can change until your first publish.';
|
|
}
|
|
|
|
@override
|
|
String get passwordResendCode => 'Send a new code';
|
|
|
|
@override
|
|
String get passwordTotpCode => 'Code from your authenticator app';
|
|
|
|
@override
|
|
String get passwordRecoveryCode => 'Recovery code';
|
|
|
|
@override
|
|
String get passwordUseRecoveryCode => 'Use a recovery code instead';
|
|
|
|
@override
|
|
String get passwordUseTotpCode => 'Use your authenticator app instead';
|
|
|
|
@override
|
|
String get passwordUnlocking => 'Unlocking your password on this device…';
|
|
|
|
@override
|
|
String get passwordMakingKeys => 'Making your keys on this device…';
|
|
|
|
@override
|
|
String get passwordSignInTitle => 'Sign in';
|
|
|
|
@override
|
|
String get passwordSignInAction => 'Sign in';
|
|
|
|
@override
|
|
String passwordSignInIntro(String instance) {
|
|
return 'With the email address and password of your account on $instance.';
|
|
}
|
|
|
|
@override
|
|
String passwordSecondFactorIntro(String instance) {
|
|
return 'Enter the code your authenticator app shows for $instance.';
|
|
}
|
|
|
|
@override
|
|
String get passwordRecoveryCodeIntro =>
|
|
'Enter one of the recovery codes you kept. Each signs in once.';
|
|
|
|
@override
|
|
String get passwordForgot => 'Forgot your password?';
|
|
|
|
@override
|
|
String get passwordOtherPassword => 'Change the address or password';
|
|
|
|
@override
|
|
String get passwordLostAuthenticator => 'Lost your authenticator?';
|
|
|
|
@override
|
|
String get passwordLostAuthenticatorTitle => 'Lost authenticator';
|
|
|
|
@override
|
|
String get passwordLostAuthenticatorIntro =>
|
|
'With a recovery code you sign in as usual. Without one, ask to reset your authenticators: it takes effect 72 hours later, and signing in with a code before then stops it.';
|
|
|
|
@override
|
|
String get passwordResetWithMail => 'Reset with a code by email';
|
|
|
|
@override
|
|
String passwordResetWithMailHint(String address) {
|
|
return 'We email a code to $address.';
|
|
}
|
|
|
|
@override
|
|
String get passwordResetWithPhrase => 'Reset with your recovery phrase';
|
|
|
|
@override
|
|
String get passwordResetWithPhraseHint => 'The 24 words you wrote down.';
|
|
|
|
@override
|
|
String get passwordSignInWithoutCode => 'Sign in without a code';
|
|
|
|
@override
|
|
String get passwordSignInWithoutCodeHint =>
|
|
'Once a reset you asked for has taken effect.';
|
|
|
|
@override
|
|
String get passwordResetAction => 'Reset';
|
|
|
|
@override
|
|
String passwordAuthenticatorResetAt(String date) {
|
|
return 'Your authenticators are reset on $date. We emailed you: if it wasn\'t you, sign in with a code before then to stop it. After that, sign in with your password alone and set up a new authenticator.';
|
|
}
|
|
|
|
@override
|
|
String passwordUnfinishedIntro(String address) {
|
|
return 'Your account was never finished. We emailed a code to $address: with it, you sign in and set up an authenticator.';
|
|
}
|
|
|
|
@override
|
|
String get passwordPhraseField => 'Recovery phrase';
|
|
|
|
@override
|
|
String get passwordPhraseFieldHint =>
|
|
'The 24 words, with spaces between them';
|
|
|
|
@override
|
|
String get passwordPhraseFieldIntro =>
|
|
'Enter your recovery phrase: it proves the account is yours.';
|
|
|
|
@override
|
|
String get passwordAuthenticatorTitle => 'Set up an authenticator';
|
|
|
|
@override
|
|
String get passwordAuthenticatorIntro =>
|
|
'Every sign-in takes a code from an authenticator app, such as Aegis, 2FAS or Proton Authenticator. Scan this code with it, or type in the key.';
|
|
|
|
@override
|
|
String get passwordAuthenticatorKey => 'Key';
|
|
|
|
@override
|
|
String get passwordAuthenticatorOpen => 'Open in your authenticator app';
|
|
|
|
@override
|
|
String get passwordAuthenticatorNoApp =>
|
|
'No app on this device opens it. Scan the code or type in the key.';
|
|
|
|
@override
|
|
String get passwordAuthenticatorCodeIntro => 'Then enter the code it shows.';
|
|
|
|
@override
|
|
String get passwordAuthenticatorOwnerIntro =>
|
|
'To add it, confirm it is you: your password and a code from an authenticator you added before.';
|
|
|
|
@override
|
|
String get passwordExistingCode =>
|
|
'Code from an authenticator you added before';
|
|
|
|
@override
|
|
String get passwordRecoveryCodesTitle => 'Recovery codes';
|
|
|
|
@override
|
|
String get passwordRecoveryCodesIntro =>
|
|
'Each signs in once in place of a code from your authenticator, should you lose it. Keep them where only you find them: they\'re shown only now.';
|
|
|
|
@override
|
|
String get passwordCodesKept => 'I\'ve kept them';
|
|
|
|
@override
|
|
String get passwordPhraseTitle => 'Your recovery phrase';
|
|
|
|
@override
|
|
String get passwordPhraseIntro =>
|
|
'These 24 words open your account\'s keys should you forget your password: without them, what\'s encrypted is lost. Write them down in order, and keep them where only you find them. They\'re shown only now.';
|
|
|
|
@override
|
|
String get passwordPhraseWrittenDown => 'I\'ve written it down';
|
|
|
|
@override
|
|
String get passwordPhraseCheckTitle => 'Check your recovery phrase';
|
|
|
|
@override
|
|
String get passwordPhraseCheckIntro =>
|
|
'Type the words asked for, from what you wrote down.';
|
|
|
|
@override
|
|
String passwordPhraseWord(int number) {
|
|
return 'Word $number';
|
|
}
|
|
|
|
@override
|
|
String get passwordPhraseWrong =>
|
|
'These aren\'t the words. Look again at what you wrote down.';
|
|
|
|
@override
|
|
String get passwordPhraseShowAgain => 'Show the phrase again';
|
|
|
|
@override
|
|
String get passwordCreateTitle => 'Create an account';
|
|
|
|
@override
|
|
String passwordCreateIntro(String instance) {
|
|
return 'On $instance, with your email address, a password, and an authenticator app for the code every sign-in takes.';
|
|
}
|
|
|
|
@override
|
|
String get passwordSetUpTitle => 'Set up a password';
|
|
|
|
@override
|
|
String get passwordSetUpIntro =>
|
|
'Sign in with your email address, a password and an authenticator app, on this device and others. Everything you have stays.';
|
|
|
|
@override
|
|
String get passwordChooseIntro =>
|
|
'Choose a password. It never leaves this device: the instance can\'t read it, and can\'t reset it without what it protects being lost.';
|
|
|
|
@override
|
|
String get passwordFinishResetTitle => 'Finish the reset';
|
|
|
|
@override
|
|
String get passwordFinishResetIntro =>
|
|
'72 hours after you asked to reset your account, finish it here with a new code by email.';
|
|
|
|
@override
|
|
String get passwordFinishResetHavePhrase => 'I have my recovery phrase';
|
|
|
|
@override
|
|
String get passwordFinishResetKeepsKeys =>
|
|
'Your account keeps its keys: nothing encrypted is lost.';
|
|
|
|
@override
|
|
String get passwordFinishResetNewKeys =>
|
|
'Without your recovery phrase, your account gets new keys: what was encrypted with the old ones is lost.';
|
|
|
|
@override
|
|
String get passwordRecoveryTitle => 'Get back into your account';
|
|
|
|
@override
|
|
String get passwordRecoveryWithPhrase => 'I have my recovery phrase';
|
|
|
|
@override
|
|
String get passwordRecoveryWithPhraseHint =>
|
|
'Set a new password at once. Everything stays.';
|
|
|
|
@override
|
|
String get passwordRecoveryWithPhraseIntro =>
|
|
'Your recovery phrase opens your account\'s keys, which your new password then protects. A code from your authenticator, or a recovery code, confirms it.';
|
|
|
|
@override
|
|
String get passwordRecoveryNoCodeHint =>
|
|
'Lost your authenticator as well? Reset your account 72 hours later with your recovery phrase: it keeps everything.';
|
|
|
|
@override
|
|
String get passwordRecoveryWithoutPhrase => 'Reset my account';
|
|
|
|
@override
|
|
String get passwordRecoveryWithoutPhraseHint =>
|
|
'Takes effect 72 hours later. Without your recovery phrase, what\'s encrypted is lost.';
|
|
|
|
@override
|
|
String get passwordRecoveryStartIntro =>
|
|
'We email a code to your address. Your account can then be reset 72 hours later; signing in with your password before then stops it.';
|
|
|
|
@override
|
|
String get passwordRecoveryFinish => 'Finish a reset';
|
|
|
|
@override
|
|
String get passwordRecoveryFinishHint => '72 hours after you asked for it.';
|
|
|
|
@override
|
|
String passwordResetStarted(String date) {
|
|
return 'Your account can be reset from $date. We emailed you: if it wasn\'t you, sign in with your password before then to stop it.';
|
|
}
|
|
|
|
@override
|
|
String get passwordSectionTitle => 'Password and authenticator';
|
|
|
|
@override
|
|
String get passwordSectionFailed =>
|
|
'Couldn\'t read how your account signs in.';
|
|
|
|
@override
|
|
String get passwordSectionSetUp => 'Set up a password';
|
|
|
|
@override
|
|
String get passwordSectionSetUpHint =>
|
|
'Sign in with your email address, a password and an authenticator app.';
|
|
|
|
@override
|
|
String get passwordSectionUnfinished =>
|
|
'Finish setting up: add an authenticator';
|
|
|
|
@override
|
|
String get passwordSectionUnfinishedHint =>
|
|
'Your password signs in once an authenticator is set up.';
|
|
|
|
@override
|
|
String get passwordSectionChange => 'Change password';
|
|
|
|
@override
|
|
String get passwordSectionKeysMissing =>
|
|
'Sign in on this device with your password to change it.';
|
|
|
|
@override
|
|
String get passwordSectionNotConfirmed => 'Not set up yet';
|
|
|
|
@override
|
|
String passwordSectionRemove(String name) {
|
|
return 'Remove $name?';
|
|
}
|
|
|
|
@override
|
|
String get passwordSectionRemoveIntro =>
|
|
'Enter your password and a code from one of your authenticators to confirm.';
|
|
|
|
@override
|
|
String get passwordSectionRemoveAction => 'Remove';
|
|
|
|
@override
|
|
String get passwordSectionAddAuthenticator => 'Add an authenticator';
|
|
|
|
@override
|
|
String get passwordSectionRecoveryCodes => 'New recovery codes';
|
|
|
|
@override
|
|
String get passwordSectionRecoveryCodesHint => 'The old ones stop working.';
|
|
|
|
@override
|
|
String get passwordSectionNewPhrase => 'New recovery phrase';
|
|
|
|
@override
|
|
String get passwordSectionPhraseHint => 'Your old phrase stops working.';
|
|
|
|
@override
|
|
String get passwordChangeTitle => 'Change password';
|
|
|
|
@override
|
|
String get passwordChangeIntro =>
|
|
'Your other devices are signed out. Your keys stay: nothing is lost.';
|
|
|
|
@override
|
|
String get passwordChangeAction => 'Change password';
|
|
|
|
@override
|
|
String get passwordChanged =>
|
|
'Password changed. Your other devices are signed out.';
|
|
|
|
@override
|
|
String get passwordNewCodesIntro =>
|
|
'Enter your password and a code from your authenticator app. Your old recovery codes stop working.';
|
|
|
|
@override
|
|
String get passwordNewPhraseIntro =>
|
|
'Your new recovery phrase. Write the 24 words down in order: once you confirm it, your old phrase opens nothing any more.';
|
|
|
|
@override
|
|
String get passwordPhraseKept =>
|
|
'New recovery phrase set. The old one no longer works.';
|
|
|
|
@override
|
|
String get passwordWrongCredentials =>
|
|
'The address, the password or the code isn\'t right.';
|
|
|
|
@override
|
|
String get passwordTooManyAttempts =>
|
|
'Too many attempts. Try again in an hour.';
|
|
|
|
@override
|
|
String get passwordSetupIncomplete =>
|
|
'Your account was never finished: set up an authenticator.';
|
|
|
|
@override
|
|
String passwordNotDue(String date) {
|
|
return 'This takes effect on $date.';
|
|
}
|
|
|
|
@override
|
|
String get passwordNotDueYet => 'This hasn\'t taken effect yet.';
|
|
|
|
@override
|
|
String get passwordNoReset => 'No reset waits for this address.';
|
|
|
|
@override
|
|
String get passwordExists =>
|
|
'This address\'s account has a password already. Sign in with it, or get back in if you\'ve forgotten it.';
|
|
|
|
@override
|
|
String get passwordAddressTaken => 'This address belongs to another account.';
|
|
|
|
@override
|
|
String get passwordNoPassword => 'This account has no password.';
|
|
|
|
@override
|
|
String get passwordWrongCode =>
|
|
'This code isn\'t right. Enter the one your app shows now.';
|
|
|
|
@override
|
|
String get passwordLastAuthenticator =>
|
|
'Your last authenticator can\'t go: every sign-in needs one.';
|
|
|
|
@override
|
|
String get passwordTooManyAuthenticators =>
|
|
'Your account has as many authenticators as it may. Remove one first.';
|
|
|
|
@override
|
|
String get passwordUnknownAuthenticator => 'This authenticator is gone.';
|
|
|
|
@override
|
|
String get passwordInvalidSetup =>
|
|
'The instance didn\'t accept what this device made. Update the app, or try again.';
|
|
|
|
@override
|
|
String get passwordChallengeExpired => 'That took too long. Try again.';
|
|
|
|
@override
|
|
String get passwordUnavailable => 'This instance offers no password sign-in.';
|
|
|
|
@override
|
|
String get passwordNotAnAddress => 'This isn\'t an email address.';
|
|
|
|
@override
|
|
String get passwordTooManyCodes =>
|
|
'Too many codes asked for. Try again in an hour.';
|
|
|
|
@override
|
|
String get passwordWrongMailCode => 'This code isn\'t right.';
|
|
|
|
@override
|
|
String get passwordTooManyMailTries =>
|
|
'Too many wrong codes. Ask for a new one.';
|
|
|
|
@override
|
|
String get passwordMailCodeExpired =>
|
|
'This code is no longer valid. Ask for a new one.';
|
|
|
|
@override
|
|
String get passwordMailFailed =>
|
|
'The instance couldn\'t send the email. Try again later.';
|
|
|
|
@override
|
|
String get passwordOtherAddressLinked =>
|
|
'Your account has another email address.';
|
|
|
|
@override
|
|
String get passwordNotAPhrase =>
|
|
'This isn\'t a recovery phrase: check every word and their number.';
|
|
|
|
@override
|
|
String get passwordPhraseDoesNotFit =>
|
|
'The address or the recovery phrase isn\'t right.';
|
|
|
|
@override
|
|
String get passwordUnusable =>
|
|
'This password can\'t be used: it\'s empty, or holds characters that aren\'t text.';
|
|
|
|
@override
|
|
String get passwordInstanceUnproven =>
|
|
'The instance couldn\'t prove it knows your password, so this device trusts nothing it says. Try again; if it happens again, the instance isn\'t the one it claims to be.';
|
|
|
|
@override
|
|
String get passwordKeysMissing =>
|
|
'Your account\'s keys aren\'t on this device. Sign out and in again with your password here.';
|
|
|
|
@override
|
|
String get signUpsClosed => 'This instance takes no new accounts.';
|
|
|
|
@override
|
|
String get signUpsTooManyWaiting =>
|
|
'Too many new accounts already wait for approval. Try again later.';
|
|
|
|
@override
|
|
String get passwordUnsafeCosts =>
|
|
'The instance asked for your password to be checked in a way no account uses, so nothing was sent. If it happens again, the instance isn\'t the one it claims to be.';
|
|
|
|
@override
|
|
String get passwordFailed =>
|
|
'Couldn\'t reach the instance. Check the connection and try again.';
|
|
|
|
@override
|
|
String passwordMinLength(int count) {
|
|
return 'At least $count characters';
|
|
}
|
|
|
|
@override
|
|
String passwordTooShort(int count) {
|
|
return 'A new password needs at least $count characters: should the instance\'s database ever leak, a short one is guessed first.';
|
|
}
|
|
|
|
@override
|
|
String passwordCodesWait(String date) {
|
|
return 'Too many wrong codes in a row: no code is taken until $date. If they weren\'t yours, someone knows your password: change it then.';
|
|
}
|
|
|
|
@override
|
|
String get passwordDeleteIntro =>
|
|
'Your account goes with everything in it, in every service of this instance. To confirm, type your password and a code from your authenticator app.';
|
|
|
|
@override
|
|
String get passwordSessionEnded =>
|
|
'Too many wrong codes in a row from this device: it was signed out. Sign in again with your password and a code.';
|
|
|
|
@override
|
|
String get passwordAddressUnknown =>
|
|
'Enter your account\'s email address: the code goes there.';
|
|
|
|
@override
|
|
String get passwordDeleteIntroByMail =>
|
|
'Your account goes with everything in it, in every service of this instance. None of its authenticators works now, so a code by mail confirms it: type your password, then the code we email to your address.';
|
|
|
|
@override
|
|
String get passwordDeleteSendCode => 'Email me a code';
|
|
|
|
@override
|
|
String get passwordAuthenticatorPasswordIntro =>
|
|
'To add it, confirm it is you with your password.';
|
|
|
|
@override
|
|
String get passwordWarningTitle => 'Someone tried your password';
|
|
|
|
@override
|
|
String passwordWarningBody(String date) {
|
|
return 'On $date, a device signed in to your account sent a wrong password or code ten times in a row, and was signed out. If that wasn\'t you, someone else may have that device or its session: change your password.';
|
|
}
|
|
|
|
@override
|
|
String get passwordWarningDismiss => 'Dismiss';
|
|
|
|
@override
|
|
String get passwordWarningLater => 'Remind me later';
|
|
|
|
@override
|
|
String get passwordResetsTitle => 'A reset is waiting';
|
|
|
|
@override
|
|
String passwordResetsAuthenticator(String date) {
|
|
return 'Your authenticators will be removed on $date: someone asked with your password. If that wasn\'t you, call it off and change your password.';
|
|
}
|
|
|
|
@override
|
|
String passwordResetsAccount(String date) {
|
|
return 'Your account will get a new password and new keys on $date, and what is encrypted under the old ones will be lost: someone asked with a code by mail. If that wasn\'t you, call it off.';
|
|
}
|
|
|
|
@override
|
|
String get passwordResetsCallOff => 'Call it off';
|
|
|
|
@override
|
|
String get passwordCallOffTitle => 'Call off the reset';
|
|
|
|
@override
|
|
String get passwordCallOffIntro =>
|
|
'Your password and a code call off every reset waiting.';
|
|
|
|
@override
|
|
String get passwordSignedInBefore =>
|
|
'Only a device signed in since then can dismiss this warning: sign in again on this one, or change your password.';
|
|
|
|
@override
|
|
String get simpleLoginContinue => 'Continue with SimpleLogin';
|
|
|
|
@override
|
|
String simpleLoginNote(String instance) {
|
|
return 'SimpleLogin is Proton\'s sign-in, and a Proton account works there too. It learns that you use $instance, which keeps only your SimpleLogin ID: your name suggests a handle once, and nothing else is kept.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginTitle => 'Sign in with SimpleLogin';
|
|
|
|
@override
|
|
String get simpleLoginAddTitle => 'Add SimpleLogin';
|
|
|
|
@override
|
|
String get simpleLoginInBrowser => 'Continue in your browser.';
|
|
|
|
@override
|
|
String get simpleLoginNewcomerTitle => 'New here?';
|
|
|
|
@override
|
|
String simpleLoginNewcomerIntro(String instance) {
|
|
return 'Your SimpleLogin account has no account on $instance yet.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginCreateHint =>
|
|
'Choose a handle and a password; you get a recovery phrase.';
|
|
|
|
@override
|
|
String get simpleLoginHaveOne => 'I already have one';
|
|
|
|
@override
|
|
String get simpleLoginHaveOneHint =>
|
|
'Link it again with your handle and your recovery phrase.';
|
|
|
|
@override
|
|
String get handleIntro =>
|
|
'Others find you by your handle. It stays private until you publish something or fill in your profile, and can change until your first publish.';
|
|
|
|
@override
|
|
String get handleLabel => 'Handle';
|
|
|
|
@override
|
|
String handleFree(String handle) {
|
|
return '@$handle is free';
|
|
}
|
|
|
|
@override
|
|
String get handleChecking => 'Checking…';
|
|
|
|
@override
|
|
String get simpleLoginPasswordIntro =>
|
|
'Choose a password: you type it when you sign in on another device. It never leaves this device: the instance can\'t read it, and can\'t reset it without what it protects being lost.';
|
|
|
|
@override
|
|
String get simpleLoginCreate => 'Create the account';
|
|
|
|
@override
|
|
String get simpleLoginUnlockTitle => 'Your password';
|
|
|
|
@override
|
|
String simpleLoginUnlockIntroAs(String handle) {
|
|
return 'Signed in with SimpleLogin as @$handle. Your password opens your keys on this device.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginUnlockIntro =>
|
|
'Signed in with SimpleLogin. Your password opens your keys on this device.';
|
|
|
|
@override
|
|
String get simpleLoginOpen => 'Open';
|
|
|
|
@override
|
|
String get simpleLoginMendTitle => 'Link your account';
|
|
|
|
@override
|
|
String get simpleLoginMendIntro =>
|
|
'Your SimpleLogin account isn\'t the one your account knows any more. Link them again with your handle and your recovery phrase: your other devices are then signed out.';
|
|
|
|
@override
|
|
String get simpleLoginMend => 'Link';
|
|
|
|
@override
|
|
String get simpleLoginWrongPassword => 'The password isn\'t right.';
|
|
|
|
@override
|
|
String get simpleLoginMendDoesNotFit =>
|
|
'The handle or the recovery phrase isn\'t right.';
|
|
|
|
@override
|
|
String get simpleLoginForgotTitle => 'A new password';
|
|
|
|
@override
|
|
String get simpleLoginForgotIntro =>
|
|
'Your recovery phrase opens your keys, which your new password then protects. Everything stays; your other devices are signed out.';
|
|
|
|
@override
|
|
String get simpleLoginForgotDoesNotFit => 'The recovery phrase isn\'t right.';
|
|
|
|
@override
|
|
String simpleLoginResetWaiting(String date) {
|
|
return 'New keys were asked for: from $date, a SimpleLogin sign-in can set them up. Your password opening your keys calls it off.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginPhraseLost => 'Lost your recovery phrase too?';
|
|
|
|
@override
|
|
String get simpleLoginResetTitle => 'New keys';
|
|
|
|
@override
|
|
String simpleLoginResetIntro(String instance) {
|
|
return 'Without your password or your recovery phrase, nobody can open your keys, not even $instance. New ones can be set up 72 hours from now, when you sign in with SimpleLogin again. Your handle, your profile and what you published stay; what was encrypted under your old keys is lost, unless you finish on a device still signed in, which keeps them.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginResetIntroDevices =>
|
|
'Meanwhile your signed-in devices show the reset, and your password calls it off there, should someone else have asked for it.';
|
|
|
|
@override
|
|
String get simpleLoginResetAsk => 'Ask for new keys';
|
|
|
|
@override
|
|
String get simpleLoginResetAskedTitle => 'New keys asked for';
|
|
|
|
@override
|
|
String simpleLoginResetAskedIntro(String date) {
|
|
return 'From $date, sign in with SimpleLogin again to set them up. Should you find your password or your recovery phrase before then, opening your keys with it calls the reset off.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginResetDueTitle => 'Your new keys';
|
|
|
|
@override
|
|
String get simpleLoginResetDueIntro =>
|
|
'The new keys you asked for can be set up now. Or open your old keys with your password, which calls the reset off.';
|
|
|
|
@override
|
|
String get simpleLoginResetNewKeys => 'Set up new keys';
|
|
|
|
@override
|
|
String get simpleLoginResetNewKeysHint =>
|
|
'A new password and recovery phrase. What was encrypted under your old keys is lost, unless you finish on a device still signed in.';
|
|
|
|
@override
|
|
String get simpleLoginResetHavePassword => 'I have my password';
|
|
|
|
@override
|
|
String get simpleLoginResetHavePasswordHint => 'Your keys open, and stay.';
|
|
|
|
@override
|
|
String get simpleLoginResetKeepIntro =>
|
|
'Choose a new password: your keys stay, under it and a new recovery phrase, so nothing is lost. Your other devices are signed out.';
|
|
|
|
@override
|
|
String get simpleLoginResetFinish => 'Set up the keys';
|
|
|
|
@override
|
|
String get simpleLoginProofKeyTitle => 'Your password and a code';
|
|
|
|
@override
|
|
String simpleLoginProofKeyIntroAs(String handle) {
|
|
return 'Signed in with SimpleLogin as @$handle. Your account also signs in with a password: type it and a code from your authenticator once, and your password opens your keys after SimpleLogin from then on.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginProofKeyIntro =>
|
|
'Your account also signs in with a password: type it and a code from your authenticator once, and your password opens your keys after SimpleLogin from then on.';
|
|
|
|
@override
|
|
String simpleLoginResetBanner(String date) {
|
|
return 'New keys were asked for with your SimpleLogin account: from $date, whoever has it can set them up. Unless that was you, call it off with your password.';
|
|
}
|
|
|
|
@override
|
|
String get simpleLoginResetBannerDue =>
|
|
'New keys were asked for with your SimpleLogin account, and whoever has it can set them up now. Unless that was you, call it off with your password.';
|
|
|
|
@override
|
|
String get simpleLoginResetBannerDueHere =>
|
|
'New keys were asked for with your SimpleLogin account and can be set up now. If that was you, finish here: your keys stay. If not, call it off with your password.';
|
|
|
|
@override
|
|
String get simpleLoginResetFinishHere => 'Finish here';
|
|
|
|
@override
|
|
String get simpleLoginCallOffIntro =>
|
|
'Your password calls off the reset of your keys.';
|
|
|
|
@override
|
|
String get simpleLoginResetCalledOff => 'Reset called off.';
|
|
|
|
@override
|
|
String get simpleLoginResetFinished =>
|
|
'New password and recovery phrase set.';
|
|
|
|
@override
|
|
String get simpleLoginUnavailable =>
|
|
'This instance doesn\'t offer sign-in with SimpleLogin.';
|
|
|
|
@override
|
|
String get simpleLoginDenied =>
|
|
'SimpleLogin\'s sign-in was declined, so nothing was shared.';
|
|
|
|
@override
|
|
String get simpleLoginNoBrowser =>
|
|
'There\'s no browser to open SimpleLogin\'s page in.';
|
|
|
|
@override
|
|
String get simpleLoginStartAgain =>
|
|
'The sign-in took too long, or another one took its place. Begin it again.';
|
|
|
|
@override
|
|
String get simpleLoginRejected =>
|
|
'SimpleLogin didn\'t confirm the sign-in. Begin it again.';
|
|
|
|
@override
|
|
String get simpleLoginProviderUnavailable =>
|
|
'The instance can\'t reach SimpleLogin right now. Try again later.';
|
|
|
|
@override
|
|
String get simpleLoginTakenByAnotherPerson =>
|
|
'This SimpleLogin account belongs to another account here.';
|
|
|
|
@override
|
|
String get simpleLoginOtherIdentityLinked =>
|
|
'Your account has another SimpleLogin account already.';
|
|
|
|
@override
|
|
String get simpleLoginTooManyAttempts =>
|
|
'Too many sign-ins began from this network. Try again in an hour.';
|
|
|
|
@override
|
|
String get handleInvalid =>
|
|
'A handle is 1 to 30 letters (a to z), digits or underscores.';
|
|
|
|
@override
|
|
String get handleReserved => 'This handle is kept for the instance.';
|
|
|
|
@override
|
|
String get handleTaken => 'Someone else has this handle.';
|
|
|
|
@override
|
|
String get handleTooManyChecks =>
|
|
'Too many handles were tried. Try again in an hour.';
|
|
|
|
@override
|
|
String get simpleLoginSectionTitle => 'SimpleLogin';
|
|
|
|
@override
|
|
String get simpleLoginSignsYouIn => 'Signs you in';
|
|
|
|
@override
|
|
String get simpleLoginAddHint =>
|
|
'Sign in with SimpleLogin, or with your Proton account.';
|
|
|
|
@override
|
|
String get simpleLoginAdded => 'SimpleLogin added.';
|
|
|
|
@override
|
|
String get operatorTitle => 'This instance';
|
|
|
|
@override
|
|
String get operatorAccounts => 'Accounts and operators';
|
|
|
|
@override
|
|
String operatorWaitingCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count accounts wait for approval',
|
|
one: '1 account waits for approval',
|
|
zero: 'Nobody waits for approval',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get operatorWaitingTitle => 'Waiting';
|
|
|
|
@override
|
|
String get operatorNobodyWaits => 'Nobody waits.';
|
|
|
|
@override
|
|
String get operatorNoHandle => 'No handle yet';
|
|
|
|
@override
|
|
String operatorNewSince(String date) {
|
|
return 'New, waiting since $date';
|
|
}
|
|
|
|
@override
|
|
String operatorSuspendedSince(String date) {
|
|
return 'Suspended since $date';
|
|
}
|
|
|
|
@override
|
|
String get operatorApproveNote =>
|
|
'Read them these four words, and approve only once they confirm these are on their screen.';
|
|
|
|
@override
|
|
String get operatorApprove => 'Approve';
|
|
|
|
@override
|
|
String get operatorRefuse => 'Refuse';
|
|
|
|
@override
|
|
String get operatorRefuseTitle => 'Refuse this account?';
|
|
|
|
@override
|
|
String get operatorRefuseMessage =>
|
|
'It is deleted with everything it has. They can sign up again.';
|
|
|
|
@override
|
|
String get operatorOperatorsTitle => 'Operators';
|
|
|
|
@override
|
|
String get operatorTakeBack => 'Take back';
|
|
|
|
@override
|
|
String get operatorTakeBackTitle => 'Take back the role?';
|
|
|
|
@override
|
|
String get operatorTakeBackMessage =>
|
|
'They keep their account, but no longer approve, refuse or suspend accounts here.';
|
|
|
|
@override
|
|
String get operatorAppoint => 'Name an operator';
|
|
|
|
@override
|
|
String get operatorAppointMessage =>
|
|
'They approve, refuse and suspend accounts here, and name operators, as you do.';
|
|
|
|
@override
|
|
String get operatorAppointConfirm => 'Name';
|
|
|
|
@override
|
|
String get operatorHandle => 'Handle';
|
|
|
|
@override
|
|
String get operatorFindTitle => 'Find an account';
|
|
|
|
@override
|
|
String get operatorFoundNone => 'No account\'s handle starts like this.';
|
|
|
|
@override
|
|
String operatorMadeOn(String date) {
|
|
return 'Since $date';
|
|
}
|
|
|
|
@override
|
|
String get operatorIsOperator => 'Operator';
|
|
|
|
@override
|
|
String get operatorIsWaiting => 'Waiting';
|
|
|
|
@override
|
|
String get operatorIsSuspended => 'Suspended';
|
|
|
|
@override
|
|
String get operatorSuspend => 'Suspend';
|
|
|
|
@override
|
|
String get operatorSuspendTitle => 'Suspend this account?';
|
|
|
|
@override
|
|
String get operatorSuspendMessage =>
|
|
'They are signed out everywhere and can\'t sign in until you approve them again. Nothing they have is deleted.';
|
|
|
|
@override
|
|
String get operatorMakeOperator => 'Name as operator';
|
|
|
|
@override
|
|
String get operatorNotFound =>
|
|
'That account isn\'t there any more, or doesn\'t wait.';
|
|
|
|
@override
|
|
String get operatorIsOperatorProblem =>
|
|
'An operator can\'t be suspended. Take back their role first.';
|
|
|
|
@override
|
|
String get operatorLastOperator =>
|
|
'The instance needs at least one operator.';
|
|
|
|
@override
|
|
String get operatorNotAllowed =>
|
|
'Only the instance\'s operators can do this.';
|
|
|
|
@override
|
|
String get operatorFailed => 'That didn\'t work. Try again.';
|
|
}
|
|
|
|
/// The translations for English, as used in the United Kingdom (`en_GB`).
|
|
class HalkyonAppLocalizationsEnGb extends HalkyonAppLocalizationsEn {
|
|
HalkyonAppLocalizationsEnGb() : super('en_GB');
|
|
}
|
|
|
|
/// The translations for English, as used in the United States (`en_US`).
|
|
class HalkyonAppLocalizationsEnUs extends HalkyonAppLocalizationsEn {
|
|
HalkyonAppLocalizationsEnUs() : super('en_US');
|
|
}
|