l10n: extract strings
This commit is contained in:
parent
fda7516efd
commit
c78bc1524f
|
@ -20,7 +20,10 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
|||
class MessageLookup extends MessageLookupByLibrary {
|
||||
String get localeName => 'en';
|
||||
|
||||
static String m0(passwordStrengthValue) =>
|
||||
static String m0(supportEmail) =>
|
||||
"Please drop an email to ${supportEmail} from your registered email address";
|
||||
|
||||
static String m1(passwordStrengthValue) =>
|
||||
"Password strength: ${passwordStrengthValue}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
|
@ -39,17 +42,30 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"byClickingLogInIAgreeToThe": MessageLookupByLibrary.simpleMessage(
|
||||
"By clicking log in, I agree to the"),
|
||||
"cancel": MessageLookupByLibrary.simpleMessage("Cancel"),
|
||||
"changeEmail": MessageLookupByLibrary.simpleMessage("Change email"),
|
||||
"changePasswordTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Change password"),
|
||||
"checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage(
|
||||
"Please check your inbox (and spam) to complete verification"),
|
||||
"codeCopiedToClipboard":
|
||||
MessageLookupByLibrary.simpleMessage("Code copied to clipboard"),
|
||||
"confirm": MessageLookupByLibrary.simpleMessage("Confirm"),
|
||||
"confirmAccountDeletion":
|
||||
MessageLookupByLibrary.simpleMessage("Confirm Account Deletion"),
|
||||
"confirmDeletePrompt": MessageLookupByLibrary.simpleMessage(
|
||||
"Yes, I want to permanently delete this account and all its data."),
|
||||
"confirmPassword":
|
||||
MessageLookupByLibrary.simpleMessage("Confirm password"),
|
||||
"confirmRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Confirm recovery key"),
|
||||
"confirmYourRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Confirm your recovery key"),
|
||||
"contactSupport":
|
||||
MessageLookupByLibrary.simpleMessage("Contact support"),
|
||||
"continueLabel": MessageLookupByLibrary.simpleMessage("Continue"),
|
||||
"copypasteThisCodentoYourAuthenticatorApp":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Copy-paste this code\nto your authenticator app"),
|
||||
"createAccount": MessageLookupByLibrary.simpleMessage("Create account"),
|
||||
"createNewAccount":
|
||||
MessageLookupByLibrary.simpleMessage("Create new account"),
|
||||
|
@ -71,20 +87,28 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
MessageLookupByLibrary.simpleMessage("My reason isn’t listed"),
|
||||
"deleteRequestSLAText": MessageLookupByLibrary.simpleMessage(
|
||||
"Your request will be processed within 72 hours."),
|
||||
"doThisLater": MessageLookupByLibrary.simpleMessage("Do this later"),
|
||||
"dropSupportEmail": m0,
|
||||
"email": MessageLookupByLibrary.simpleMessage("Email"),
|
||||
"encryption": MessageLookupByLibrary.simpleMessage("Encryption"),
|
||||
"encryptionKeys":
|
||||
MessageLookupByLibrary.simpleMessage("Encryption keys"),
|
||||
"endToEndEncrypted":
|
||||
MessageLookupByLibrary.simpleMessage("end-to-end encrypted"),
|
||||
"enterCode": MessageLookupByLibrary.simpleMessage("Enter code"),
|
||||
"enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage(
|
||||
"Enter a new password we can use to encrypt your data"),
|
||||
"enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage(
|
||||
"Enter a password we can use to encrypt your data"),
|
||||
"enterThe6digitCodeFromnyourAuthenticatorApp":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Enter the 6-digit code from\nyour authenticator app"),
|
||||
"enterValidEmail": MessageLookupByLibrary.simpleMessage(
|
||||
"Please enter a valid email address."),
|
||||
"enterYourEmailAddress":
|
||||
MessageLookupByLibrary.simpleMessage("Enter your email address"),
|
||||
"enterYourPassword":
|
||||
MessageLookupByLibrary.simpleMessage("Enter your password"),
|
||||
"enterYourRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Enter your recovery key"),
|
||||
"feedback": MessageLookupByLibrary.simpleMessage("Feedback"),
|
||||
|
@ -95,6 +119,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage(
|
||||
"Generating encryption keys..."),
|
||||
"howItWorks": MessageLookupByLibrary.simpleMessage("How it works"),
|
||||
"incorrectPasswordTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Incorrect password"),
|
||||
"incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage(
|
||||
"The recovery key you entered is incorrect"),
|
||||
"incorrectRecoveryKeyTitle":
|
||||
|
@ -103,9 +129,13 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
MessageLookupByLibrary.simpleMessage("Insecure device"),
|
||||
"invalidEmailAddress":
|
||||
MessageLookupByLibrary.simpleMessage("Invalid email address"),
|
||||
"invalidKey": MessageLookupByLibrary.simpleMessage("Invalid key"),
|
||||
"invalidRecoveryKey": MessageLookupByLibrary.simpleMessage(
|
||||
"The recovery key you entered is not valid. Please make sure it "),
|
||||
"kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage(
|
||||
"Kindly help us with this information"),
|
||||
"logInLabel": MessageLookupByLibrary.simpleMessage("Log in"),
|
||||
"lostDevice": MessageLookupByLibrary.simpleMessage("Lost device?"),
|
||||
"moderateStrength": MessageLookupByLibrary.simpleMessage("Moderate"),
|
||||
"noPasswordWarningPart1": MessageLookupByLibrary.simpleMessage(
|
||||
"We don\'t store this password, so if you forget,"),
|
||||
|
@ -120,23 +150,54 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"password": MessageLookupByLibrary.simpleMessage("Password"),
|
||||
"passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage(
|
||||
"Password changed successfully"),
|
||||
"passwordStrength": m0,
|
||||
"passwordStrength": m1,
|
||||
"pleaseSendAnEmailTo":
|
||||
MessageLookupByLibrary.simpleMessage("Please send an email to"),
|
||||
"pleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage("Please try again"),
|
||||
"pleaseWait": MessageLookupByLibrary.simpleMessage("Please wait..."),
|
||||
"privacyPolicy": MessageLookupByLibrary.simpleMessage("privacy policy"),
|
||||
"privacyPolicyTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Privacy Policy"),
|
||||
"recover": MessageLookupByLibrary.simpleMessage("Recover"),
|
||||
"recoverAccount":
|
||||
MessageLookupByLibrary.simpleMessage("Recover account"),
|
||||
"recoverButton": MessageLookupByLibrary.simpleMessage("Recover"),
|
||||
"recoveryKey": MessageLookupByLibrary.simpleMessage("Recovery key"),
|
||||
"recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage(
|
||||
"Recovery key copied to clipboard"),
|
||||
"recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage(
|
||||
"If you forget your password, the only way you can recover your data is with this key."),
|
||||
"recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage(
|
||||
"We don\'t store this key, please save this 24 word key in a safe place."),
|
||||
"recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage(
|
||||
"Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up."),
|
||||
"recoveryKeyVerified":
|
||||
MessageLookupByLibrary.simpleMessage("Recovery key verified"),
|
||||
"recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage(
|
||||
"Your recovery key is the only way to recover your photos if you forget your password. You can find your recovery key in Settings > Account.\n\nPlease enter your recovery key here to verify that you have saved it correctly."),
|
||||
"recoverySuccessful":
|
||||
MessageLookupByLibrary.simpleMessage("Recovery successful!"),
|
||||
"recreatePasswordBody": MessageLookupByLibrary.simpleMessage(
|
||||
"The current device is not powerful enough to verify your "),
|
||||
"recreatePasswordTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Recreate password"),
|
||||
"resendEmail": MessageLookupByLibrary.simpleMessage("Resend email"),
|
||||
"resetPasswordTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Reset password"),
|
||||
"saveKey": MessageLookupByLibrary.simpleMessage("Save key"),
|
||||
"saveYourRecoveryKeyIfYouHaventAlready":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Save your recovery key if you haven\'t already"),
|
||||
"scanCode": MessageLookupByLibrary.simpleMessage("Scan code"),
|
||||
"scanThisBarcodeWithnyourAuthenticatorApp":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Scan this barcode with\nyour authenticator app"),
|
||||
"selectReason": MessageLookupByLibrary.simpleMessage("Select reason"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Send email"),
|
||||
"setPasswordTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Set password"),
|
||||
"setupComplete": MessageLookupByLibrary.simpleMessage("Setup complete"),
|
||||
"somethingWentWrongPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Something went wrong, please try again"),
|
||||
|
@ -145,6 +206,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we could not generate secure keys on this device.\n\nplease sign up from a different device."),
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Strong"),
|
||||
"tapToCopy": MessageLookupByLibrary.simpleMessage("tap to copy"),
|
||||
"tapToEnterCode":
|
||||
MessageLookupByLibrary.simpleMessage("Tap to enter code"),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Terminate"),
|
||||
|
@ -155,15 +217,32 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"termsOfService":
|
||||
MessageLookupByLibrary.simpleMessage("terms of service"),
|
||||
"termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Terms"),
|
||||
"thisCanBeUsedToRecoverYourAccountIfYou":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"This can be used to recover your account if you lose your second factor"),
|
||||
"thisDevice": MessageLookupByLibrary.simpleMessage("This device"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"This will log you out of the following device:"),
|
||||
"thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage(
|
||||
"This will log you out of this device!"),
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Try again"),
|
||||
"twofactorAuthenticationPageTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Two-factor authentication"),
|
||||
"twofactorSetup":
|
||||
MessageLookupByLibrary.simpleMessage("Two-factor setup"),
|
||||
"useRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Use recovery key"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verify"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("Verify email"),
|
||||
"verifyPassword":
|
||||
MessageLookupByLibrary.simpleMessage("Verify password"),
|
||||
"verifyingRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Verifying recovery key..."),
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("View recovery key"),
|
||||
"weakStrength": MessageLookupByLibrary.simpleMessage("Weak"),
|
||||
"welcomeBack": MessageLookupByLibrary.simpleMessage("Welcome back!"),
|
||||
"weveSentAMailTo":
|
||||
MessageLookupByLibrary.simpleMessage("We\'ve sent a mail to"),
|
||||
"yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
|
||||
|
|
|
@ -907,6 +907,436 @@ class S {
|
|||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Change email`
|
||||
String get changeEmail {
|
||||
return Intl.message(
|
||||
'Change email',
|
||||
name: 'changeEmail',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Enter your password`
|
||||
String get enterYourPassword {
|
||||
return Intl.message(
|
||||
'Enter your password',
|
||||
name: 'enterYourPassword',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Welcome back!`
|
||||
String get welcomeBack {
|
||||
return Intl.message(
|
||||
'Welcome back!',
|
||||
name: 'welcomeBack',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Contact support`
|
||||
String get contactSupport {
|
||||
return Intl.message(
|
||||
'Contact support',
|
||||
name: 'contactSupport',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Incorrect password`
|
||||
String get incorrectPasswordTitle {
|
||||
return Intl.message(
|
||||
'Incorrect password',
|
||||
name: 'incorrectPasswordTitle',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Please try again`
|
||||
String get pleaseTryAgain {
|
||||
return Intl.message(
|
||||
'Please try again',
|
||||
name: 'pleaseTryAgain',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Recreate password`
|
||||
String get recreatePasswordTitle {
|
||||
return Intl.message(
|
||||
'Recreate password',
|
||||
name: 'recreatePasswordTitle',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Use recovery key`
|
||||
String get useRecoveryKey {
|
||||
return Intl.message(
|
||||
'Use recovery key',
|
||||
name: 'useRecoveryKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `The current device is not powerful enough to verify your `
|
||||
String get recreatePasswordBody {
|
||||
return Intl.message(
|
||||
'The current device is not powerful enough to verify your ',
|
||||
name: 'recreatePasswordBody',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Verify password`
|
||||
String get verifyPassword {
|
||||
return Intl.message(
|
||||
'Verify password',
|
||||
name: 'verifyPassword',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Recovery key`
|
||||
String get recoveryKey {
|
||||
return Intl.message(
|
||||
'Recovery key',
|
||||
name: 'recoveryKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `If you forget your password, the only way you can recover your data is with this key.`
|
||||
String get recoveryKeyOnForgotPassword {
|
||||
return Intl.message(
|
||||
'If you forget your password, the only way you can recover your data is with this key.',
|
||||
name: 'recoveryKeyOnForgotPassword',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `We don't store this key, please save this 24 word key in a safe place.`
|
||||
String get recoveryKeySaveDescription {
|
||||
return Intl.message(
|
||||
'We don\'t store this key, please save this 24 word key in a safe place.',
|
||||
name: 'recoveryKeySaveDescription',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Do this later`
|
||||
String get doThisLater {
|
||||
return Intl.message(
|
||||
'Do this later',
|
||||
name: 'doThisLater',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Save key`
|
||||
String get saveKey {
|
||||
return Intl.message(
|
||||
'Save key',
|
||||
name: 'saveKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Recovery key copied to clipboard`
|
||||
String get recoveryKeyCopiedToClipboard {
|
||||
return Intl.message(
|
||||
'Recovery key copied to clipboard',
|
||||
name: 'recoveryKeyCopiedToClipboard',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Recover account`
|
||||
String get recoverAccount {
|
||||
return Intl.message(
|
||||
'Recover account',
|
||||
name: 'recoverAccount',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Recover`
|
||||
String get recover {
|
||||
return Intl.message(
|
||||
'Recover',
|
||||
name: 'recover',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Please drop an email to {supportEmail} from your registered email address`
|
||||
String dropSupportEmail(String supportEmail) {
|
||||
return Intl.message(
|
||||
'Please drop an email to $supportEmail from your registered email address',
|
||||
name: 'dropSupportEmail',
|
||||
desc: '',
|
||||
args: [supportEmail],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Two-factor setup`
|
||||
String get twofactorSetup {
|
||||
return Intl.message(
|
||||
'Two-factor setup',
|
||||
name: 'twofactorSetup',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Enter code`
|
||||
String get enterCode {
|
||||
return Intl.message(
|
||||
'Enter code',
|
||||
name: 'enterCode',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Scan code`
|
||||
String get scanCode {
|
||||
return Intl.message(
|
||||
'Scan code',
|
||||
name: 'scanCode',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Code copied to clipboard`
|
||||
String get codeCopiedToClipboard {
|
||||
return Intl.message(
|
||||
'Code copied to clipboard',
|
||||
name: 'codeCopiedToClipboard',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Copy-paste this code\nto your authenticator app`
|
||||
String get copypasteThisCodentoYourAuthenticatorApp {
|
||||
return Intl.message(
|
||||
'Copy-paste this code\nto your authenticator app',
|
||||
name: 'copypasteThisCodentoYourAuthenticatorApp',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `tap to copy`
|
||||
String get tapToCopy {
|
||||
return Intl.message(
|
||||
'tap to copy',
|
||||
name: 'tapToCopy',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Scan this barcode with\nyour authenticator app`
|
||||
String get scanThisBarcodeWithnyourAuthenticatorApp {
|
||||
return Intl.message(
|
||||
'Scan this barcode with\nyour authenticator app',
|
||||
name: 'scanThisBarcodeWithnyourAuthenticatorApp',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Enter the 6-digit code from\nyour authenticator app`
|
||||
String get enterThe6digitCodeFromnyourAuthenticatorApp {
|
||||
return Intl.message(
|
||||
'Enter the 6-digit code from\nyour authenticator app',
|
||||
name: 'enterThe6digitCodeFromnyourAuthenticatorApp',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Confirm`
|
||||
String get confirm {
|
||||
return Intl.message(
|
||||
'Confirm',
|
||||
name: 'confirm',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Setup complete`
|
||||
String get setupComplete {
|
||||
return Intl.message(
|
||||
'Setup complete',
|
||||
name: 'setupComplete',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Save your recovery key if you haven't already`
|
||||
String get saveYourRecoveryKeyIfYouHaventAlready {
|
||||
return Intl.message(
|
||||
'Save your recovery key if you haven\'t already',
|
||||
name: 'saveYourRecoveryKeyIfYouHaventAlready',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `This can be used to recover your account if you lose your second factor`
|
||||
String get thisCanBeUsedToRecoverYourAccountIfYou {
|
||||
return Intl.message(
|
||||
'This can be used to recover your account if you lose your second factor',
|
||||
name: 'thisCanBeUsedToRecoverYourAccountIfYou',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Two-factor authentication`
|
||||
String get twofactorAuthenticationPageTitle {
|
||||
return Intl.message(
|
||||
'Two-factor authentication',
|
||||
name: 'twofactorAuthenticationPageTitle',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Lost device?`
|
||||
String get lostDevice {
|
||||
return Intl.message(
|
||||
'Lost device?',
|
||||
name: 'lostDevice',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Verifying recovery key...`
|
||||
String get verifyingRecoveryKey {
|
||||
return Intl.message(
|
||||
'Verifying recovery key...',
|
||||
name: 'verifyingRecoveryKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Recovery key verified`
|
||||
String get recoveryKeyVerified {
|
||||
return Intl.message(
|
||||
'Recovery key verified',
|
||||
name: 'recoveryKeyVerified',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up.`
|
||||
String get recoveryKeySuccessBody {
|
||||
return Intl.message(
|
||||
'Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up.',
|
||||
name: 'recoveryKeySuccessBody',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `The recovery key you entered is not valid. Please make sure it `
|
||||
String get invalidRecoveryKey {
|
||||
return Intl.message(
|
||||
'The recovery key you entered is not valid. Please make sure it ',
|
||||
name: 'invalidRecoveryKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Invalid key`
|
||||
String get invalidKey {
|
||||
return Intl.message(
|
||||
'Invalid key',
|
||||
name: 'invalidKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Try again`
|
||||
String get tryAgain {
|
||||
return Intl.message(
|
||||
'Try again',
|
||||
name: 'tryAgain',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `View recovery key`
|
||||
String get viewRecoveryKey {
|
||||
return Intl.message(
|
||||
'View recovery key',
|
||||
name: 'viewRecoveryKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Confirm recovery key`
|
||||
String get confirmRecoveryKey {
|
||||
return Intl.message(
|
||||
'Confirm recovery key',
|
||||
name: 'confirmRecoveryKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Your recovery key is the only way to recover your photos if you forget your password. You can find your recovery key in Settings > Account.\n\nPlease enter your recovery key here to verify that you have saved it correctly.`
|
||||
String get recoveryKeyVerifyReason {
|
||||
return Intl.message(
|
||||
'Your recovery key is the only way to recover your photos if you forget your password. You can find your recovery key in Settings > Account.\n\nPlease enter your recovery key here to verify that you have saved it correctly.',
|
||||
name: 'recoveryKeyVerifyReason',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Confirm your recovery key`
|
||||
String get confirmYourRecoveryKey {
|
||||
return Intl.message(
|
||||
'Confirm your recovery key',
|
||||
name: 'confirmYourRecoveryKey',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class AppLocalizationDelegate extends LocalizationsDelegate<S> {
|
||||
|
|
|
@ -118,5 +118,57 @@
|
|||
"byClickingLogInIAgreeToThe": "By clicking log in, I agree to the",
|
||||
"@byClickingLogInIAgreeToThe": {
|
||||
"description": "This text is part the sentence 'By clicking log in, I agree to the terms of service and privacy policy'"
|
||||
}
|
||||
},
|
||||
"changeEmail": "Change email",
|
||||
"enterYourPassword": "Enter your password",
|
||||
"welcomeBack": "Welcome back!",
|
||||
"contactSupport": "Contact support",
|
||||
"incorrectPasswordTitle": "Incorrect password",
|
||||
"pleaseTryAgain": "Please try again",
|
||||
"recreatePasswordTitle": "Recreate password",
|
||||
"useRecoveryKey": "Use recovery key",
|
||||
"recreatePasswordBody": "The current device is not powerful enough to verify your ",
|
||||
"verifyPassword": "Verify password",
|
||||
"recoveryKey": "Recovery key",
|
||||
"recoveryKeyOnForgotPassword": "If you forget your password, the only way you can recover your data is with this key.",
|
||||
"recoveryKeySaveDescription": "We don't store this key, please save this 24 word key in a safe place.",
|
||||
"doThisLater": "Do this later",
|
||||
"saveKey": "Save key",
|
||||
"recoveryKeyCopiedToClipboard": "Recovery key copied to clipboard",
|
||||
"recoverAccount": "Recover account",
|
||||
"recover": "Recover",
|
||||
"dropSupportEmail": "Please drop an email to {supportEmail} from your registered email address",
|
||||
"@dropSupportEmail": {
|
||||
"placeholders": {
|
||||
"supportEmail": {
|
||||
"description": "The support email address",
|
||||
"type": "String",
|
||||
"example": "support@ente.io"
|
||||
}
|
||||
}
|
||||
},
|
||||
"twofactorSetup": "Two-factor setup",
|
||||
"enterCode": "Enter code",
|
||||
"scanCode": "Scan code",
|
||||
"codeCopiedToClipboard": "Code copied to clipboard",
|
||||
"copypasteThisCodentoYourAuthenticatorApp": "Copy-paste this code\nto your authenticator app",
|
||||
"tapToCopy": "tap to copy",
|
||||
"scanThisBarcodeWithnyourAuthenticatorApp": "Scan this barcode with\nyour authenticator app",
|
||||
"enterThe6digitCodeFromnyourAuthenticatorApp": "Enter the 6-digit code from\nyour authenticator app",
|
||||
"confirm": "Confirm",
|
||||
"setupComplete": "Setup complete",
|
||||
"saveYourRecoveryKeyIfYouHaventAlready": "Save your recovery key if you haven't already",
|
||||
"thisCanBeUsedToRecoverYourAccountIfYou": "This can be used to recover your account if you lose your second factor",
|
||||
"twofactorAuthenticationPageTitle": "Two-factor authentication",
|
||||
"lostDevice": "Lost device?",
|
||||
"verifyingRecoveryKey": "Verifying recovery key...",
|
||||
"recoveryKeyVerified": "Recovery key verified",
|
||||
"recoveryKeySuccessBody": "Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up.",
|
||||
"invalidRecoveryKey": "The recovery key you entered is not valid. Please make sure it ",
|
||||
"invalidKey": "Invalid key",
|
||||
"tryAgain": "Try again",
|
||||
"viewRecoveryKey": "View recovery key",
|
||||
"confirmRecoveryKey": "Confirm recovery key",
|
||||
"recoveryKeyVerifyReason": "Your recovery key is the only way to recover your photos if you forget your password. You can find your recovery key in Settings > Account.\n\nPlease enter your recovery key here to verify that you have saved it correctly.",
|
||||
"confirmYourRecoveryKey": "Confirm your recovery key"
|
||||
}
|
|
@ -181,7 +181,7 @@ class _PasswordEntryPageState extends State<PasswordEntryPage> {
|
|||
.copyWith(fontSize: 14),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: S.of(context).noPasswordWarningPart1,
|
||||
text: '${S.of(context).noPasswordWarningPart1} ',
|
||||
),
|
||||
TextSpan(
|
||||
text: S.of(context).noPasswordWarningPart2,
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:photos/core/configuration.dart';
|
|||
import 'package:photos/core/errors.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/events/subscription_purchased_event.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/ui/account/recovery_page.dart';
|
||||
import 'package:photos/ui/common/dynamic_fab.dart';
|
||||
import 'package:photos/ui/components/buttons/button_widget.dart';
|
||||
|
@ -67,10 +68,11 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
floatingActionButton: DynamicFAB(
|
||||
isKeypadOpen: isKeypadOpen,
|
||||
isFormValid: _passwordController.text.isNotEmpty,
|
||||
buttonText: 'Verify password',
|
||||
buttonText: S.of(context).verifyPassword,
|
||||
onPressedFunction: () async {
|
||||
FocusScope.of(context).unfocus();
|
||||
final dialog = createProgressDialog(context, "Please wait...");
|
||||
final dialog =
|
||||
createProgressDialog(context, S.of(context).pleaseWait);
|
||||
await dialog.show();
|
||||
try {
|
||||
await Configuration.instance.decryptAndSaveSecrets(
|
||||
|
@ -82,12 +84,9 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
await dialog.hide();
|
||||
final dialogChoice = await showChoiceDialog(
|
||||
context,
|
||||
title: "Recreate password",
|
||||
body: "The current device is not powerful enough to verify your "
|
||||
"password, so we need to regenerate it once in a way that "
|
||||
"works with all devices. \n\nPlease login using your "
|
||||
"recovery key and regenerate your password (you can use the same one again if you wish).",
|
||||
firstButtonLabel: "Use recovery key",
|
||||
title: S.of(context).recreatePasswordTitle,
|
||||
body: S.of(context).recreatePasswordBody,
|
||||
firstButtonLabel: S.of(context).useRecoveryKey,
|
||||
);
|
||||
if (dialogChoice!.action == ButtonAction.first) {
|
||||
Navigator.of(context).push(
|
||||
|
@ -104,15 +103,15 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
await dialog.hide();
|
||||
final dialogChoice = await showChoiceDialog(
|
||||
context,
|
||||
title: "Incorrect password",
|
||||
body: "Please try again",
|
||||
firstButtonLabel: "Contact Support",
|
||||
secondButtonLabel: "OK",
|
||||
title: S.of(context).incorrectPasswordTitle,
|
||||
body: S.of(context).pleaseTryAgain,
|
||||
firstButtonLabel: S.of(context).contactSupport,
|
||||
secondButtonLabel: S.of(context).ok,
|
||||
);
|
||||
if (dialogChoice!.action == ButtonAction.first) {
|
||||
await sendLogs(
|
||||
context,
|
||||
"Contact support",
|
||||
S.of(context).contactSupport,
|
||||
"support@ente.io",
|
||||
postShare: () {},
|
||||
);
|
||||
|
@ -149,7 +148,7 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 30, horizontal: 20),
|
||||
child: Text(
|
||||
'Welcome back!',
|
||||
S.of(context).welcomeBack,
|
||||
style: Theme.of(context).textTheme.headline4,
|
||||
),
|
||||
),
|
||||
|
@ -172,7 +171,7 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
child: TextFormField(
|
||||
autofillHints: const [AutofillHints.password],
|
||||
decoration: InputDecoration(
|
||||
hintText: "Enter your password",
|
||||
hintText: S.of(context).enterYourPassword,
|
||||
filled: true,
|
||||
contentPadding: const EdgeInsets.all(20),
|
||||
border: UnderlineInputBorder(
|
||||
|
@ -234,7 +233,7 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
},
|
||||
child: Center(
|
||||
child: Text(
|
||||
"Forgot password",
|
||||
S.of(context).forgotPassword,
|
||||
style:
|
||||
Theme.of(context).textTheme.subtitle1!.copyWith(
|
||||
fontSize: 14,
|
||||
|
@ -246,8 +245,8 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () async {
|
||||
final dialog =
|
||||
createProgressDialog(context, "Please wait...");
|
||||
final dialog = createProgressDialog(
|
||||
context, S.of(context).pleaseWait);
|
||||
await dialog.show();
|
||||
await Configuration.instance.logout();
|
||||
await dialog.hide();
|
||||
|
@ -256,7 +255,7 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
|||
},
|
||||
child: Center(
|
||||
child: Text(
|
||||
"Change email",
|
||||
S.of(context).changeEmail,
|
||||
style:
|
||||
Theme.of(context).textTheme.subtitle1!.copyWith(
|
||||
fontSize: 14,
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'package:flutter/services.dart';
|
|||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/constants.dart';
|
||||
import 'package:photos/ente_theme_data.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/ui/common/gradient_button.dart';
|
||||
import 'package:photos/utils/toast_util.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
|
@ -80,7 +81,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
|||
: widget.showAppBar!
|
||||
? AppBar(
|
||||
elevation: 0,
|
||||
title: Text(widget.title ?? "Recovery key"),
|
||||
title: Text(widget.title ?? S.of(context).recoveryKey),
|
||||
)
|
||||
: null,
|
||||
body: Padding(
|
||||
|
@ -101,7 +102,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
|||
widget.showAppBar!
|
||||
? const SizedBox.shrink()
|
||||
: Text(
|
||||
widget.title ?? "Recovery key",
|
||||
widget.title ?? S.of(context).recoveryKey,
|
||||
style: Theme.of(context).textTheme.headline4,
|
||||
),
|
||||
Padding(
|
||||
|
@ -109,7 +110,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
|||
),
|
||||
Text(
|
||||
widget.text ??
|
||||
"If you forget your password, the only way you can recover your data is with this key.",
|
||||
S.of(context).recoveryKeyOnForgotPassword,
|
||||
style: Theme.of(context).textTheme.subtitle1,
|
||||
),
|
||||
const Padding(padding: EdgeInsets.only(top: 24)),
|
||||
|
@ -136,7 +137,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
|||
);
|
||||
showShortToast(
|
||||
context,
|
||||
"Recovery key copied to clipboard",
|
||||
S.of(context).recoveryKeyCopiedToClipboard,
|
||||
);
|
||||
setState(() {
|
||||
_hasTriedToSave = true;
|
||||
|
@ -176,7 +177,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
|||
padding: const EdgeInsets.symmetric(vertical: 20),
|
||||
child: Text(
|
||||
widget.subText ??
|
||||
"We don't store this key, please save this 24 word key in a safe place.",
|
||||
S.of(context).recoveryKeySaveDescription,
|
||||
style: Theme.of(context).textTheme.bodyText1,
|
||||
),
|
||||
),
|
||||
|
@ -212,7 +213,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
|||
onPressed: () async {
|
||||
await _saveKeys();
|
||||
},
|
||||
child: const Text('Do this later'),
|
||||
child: Text(S.of(context).doThisLater),
|
||||
),
|
||||
);
|
||||
childrens.add(const SizedBox(height: 10));
|
||||
|
@ -223,7 +224,7 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
|
|||
onTap: () async {
|
||||
await _shareRecoveryKey(recoveryKey);
|
||||
},
|
||||
text: 'Save key',
|
||||
text: S.of(context).saveKey,
|
||||
),
|
||||
);
|
||||
if (_hasTriedToSave) {
|
||||
|
|
|
@ -112,7 +112,7 @@ class _SessionsPageState extends State<SessionsPage> {
|
|||
}
|
||||
|
||||
Future<void> _terminateSession(Session session) async {
|
||||
final dialog = createProgressDialog(context, "Please wait...");
|
||||
final dialog = createProgressDialog(context, S.of(context).pleaseWait);
|
||||
await dialog.show();
|
||||
try {
|
||||
await UserService.instance.terminateSession(session.token);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import 'package:photos/ui/lifecycle_event_handler.dart';
|
||||
import 'package:pinput/pin_put/pin_put.dart';
|
||||
|
@ -51,8 +52,8 @@ class _TwoFactorAuthenticationPageState
|
|||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text(
|
||||
"Two-factor authentication",
|
||||
title: Text(
|
||||
S.of(context).twofactorAuthenticationPageTitle,
|
||||
),
|
||||
),
|
||||
body: _getBody(),
|
||||
|
@ -65,9 +66,9 @@ class _TwoFactorAuthenticationPageState
|
|||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
children: [
|
||||
const Text(
|
||||
"Enter the 6-digit code from\nyour authenticator app",
|
||||
style: TextStyle(
|
||||
Text(
|
||||
S.of(context).enterThe6digitCodeFromnyourAuthenticatorApp,
|
||||
style: const TextStyle(
|
||||
height: 1.4,
|
||||
fontSize: 16,
|
||||
),
|
||||
|
@ -116,7 +117,7 @@ class _TwoFactorAuthenticationPageState
|
|||
_verifyTwoFactorCode(_code);
|
||||
}
|
||||
: null,
|
||||
child: const Text("Verify"),
|
||||
child: Text(S.of(context).verify),
|
||||
),
|
||||
),
|
||||
const Padding(padding: EdgeInsets.all(30)),
|
||||
|
@ -127,10 +128,10 @@ class _TwoFactorAuthenticationPageState
|
|||
},
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: const Center(
|
||||
child: Center(
|
||||
child: Text(
|
||||
"Lost device?",
|
||||
style: TextStyle(
|
||||
S.of(context).lostDevice,
|
||||
style: const TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
fontSize: 12,
|
||||
),
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import 'package:photos/utils/dialog_util.dart';
|
||||
|
||||
|
@ -27,9 +28,9 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
|
|||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text(
|
||||
"Recover account",
|
||||
style: TextStyle(
|
||||
title: Text(
|
||||
S.of(context).recoverAccount,
|
||||
style: const TextStyle(
|
||||
fontSize: 18,
|
||||
),
|
||||
),
|
||||
|
@ -42,9 +43,9 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
|
|||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(60, 0, 60, 0),
|
||||
child: TextFormField(
|
||||
decoration: const InputDecoration(
|
||||
hintText: "Enter your recovery key",
|
||||
contentPadding: EdgeInsets.all(20),
|
||||
decoration: InputDecoration(
|
||||
hintText: S.of(context).enterYourRecoveryKey,
|
||||
contentPadding: const EdgeInsets.all(20),
|
||||
),
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
|
@ -77,7 +78,7 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
|
|||
);
|
||||
}
|
||||
: null,
|
||||
child: const Text("Recover"),
|
||||
child: Text(S.of(context).recover),
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
|
@ -85,15 +86,15 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
|
|||
onTap: () {
|
||||
showErrorDialog(
|
||||
context,
|
||||
"Contact support",
|
||||
"Please drop an email to support@ente.io from your registered email address",
|
||||
S.of(context).contactSupport,
|
||||
S.of(context).dropSupportEmail("support@ente.io"),
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(40),
|
||||
child: Center(
|
||||
child: Text(
|
||||
"No recovery key?",
|
||||
S.of(context).noRecoveryKey,
|
||||
style: TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
fontSize: 12,
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/ente_theme_data.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import 'package:photos/ui/account/recovery_key_page.dart';
|
||||
import 'package:photos/ui/lifecycle_event_handler.dart';
|
||||
|
@ -75,8 +76,8 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
title: const Text(
|
||||
"Two-factor setup",
|
||||
title: Text(
|
||||
S.of(context).twofactorSetup,
|
||||
),
|
||||
),
|
||||
body: _getBody(),
|
||||
|
@ -97,12 +98,12 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
TabBar(
|
||||
labelColor: Theme.of(context).colorScheme.greenAlternative,
|
||||
unselectedLabelColor: Colors.grey,
|
||||
tabs: const [
|
||||
tabs: [
|
||||
Tab(
|
||||
text: "Enter code",
|
||||
text: S.of(context).enterCode,
|
||||
),
|
||||
Tab(
|
||||
text: "Scan code",
|
||||
text: S.of(context).scanCode,
|
||||
)
|
||||
],
|
||||
controller: _tabController,
|
||||
|
@ -137,15 +138,15 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
return GestureDetector(
|
||||
onTap: () async {
|
||||
await Clipboard.setData(ClipboardData(text: widget.secretCode));
|
||||
showShortToast(context, "Code copied to clipboard");
|
||||
showShortToast(context, S.of(context).codeCopiedToClipboard);
|
||||
},
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Padding(padding: EdgeInsets.all(12)),
|
||||
const Text(
|
||||
"Copy-paste this code\nto your authenticator app",
|
||||
style: TextStyle(
|
||||
Text(
|
||||
S.of(context).copypasteThisCodentoYourAuthenticatorApp,
|
||||
style: const TextStyle(
|
||||
height: 1.4,
|
||||
fontSize: 16,
|
||||
),
|
||||
|
@ -171,7 +172,7 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
),
|
||||
const Padding(padding: EdgeInsets.all(6)),
|
||||
Text(
|
||||
"tap to copy",
|
||||
S.of(context).tapToCopy,
|
||||
style: TextStyle(color: textColor.withOpacity(0.5)),
|
||||
)
|
||||
],
|
||||
|
@ -184,9 +185,9 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
child: Column(
|
||||
children: [
|
||||
const Padding(padding: EdgeInsets.all(12)),
|
||||
const Text(
|
||||
"Scan this barcode with\nyour authenticator app",
|
||||
style: TextStyle(
|
||||
Text(
|
||||
S.of(context).scanThisBarcodeWithnyourAuthenticatorApp,
|
||||
style: const TextStyle(
|
||||
height: 1.4,
|
||||
fontSize: 16,
|
||||
),
|
||||
|
@ -207,9 +208,9 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
return Column(
|
||||
children: [
|
||||
const Padding(padding: EdgeInsets.all(12)),
|
||||
const Text(
|
||||
"Enter the 6-digit code from\nyour authenticator app",
|
||||
style: TextStyle(
|
||||
Text(
|
||||
S.of(context).enterThe6digitCodeFromnyourAuthenticatorApp,
|
||||
style: const TextStyle(
|
||||
height: 1.4,
|
||||
fontSize: 16,
|
||||
),
|
||||
|
@ -253,7 +254,7 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
_enableTwoFactor(_code);
|
||||
}
|
||||
: null,
|
||||
child: const Text("Confirm"),
|
||||
child: Text(S.of(context).confirm),
|
||||
),
|
||||
const Padding(padding: EdgeInsets.only(bottom: 24)),
|
||||
],
|
||||
|
@ -275,13 +276,12 @@ class _TwoFactorSetupPageState extends State<TwoFactorSetupPage>
|
|||
context,
|
||||
RecoveryKeyPage(
|
||||
recoveryKey,
|
||||
"OK",
|
||||
S.of(context).ok,
|
||||
showAppBar: true,
|
||||
onDone: () {},
|
||||
title: "Setup complete",
|
||||
text: "Save your recovery key if you haven't already",
|
||||
subText:
|
||||
"This can be used to recover your account if you lose your second factor",
|
||||
title: S.of(context).setupComplete,
|
||||
text: S.of(context).saveYourRecoveryKeyIfYouHaventAlready,
|
||||
subText: S.of(context).thisCanBeUsedToRecoverYourAccountIfYou,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'package:logging/logging.dart';
|
|||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/ente_theme_data.dart';
|
||||
import 'package:photos/events/notification_event.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/services/local_authentication_service.dart';
|
||||
import 'package:photos/services/user_remote_flag_service.dart';
|
||||
import 'package:photos/services/user_service.dart';
|
||||
|
@ -29,7 +30,8 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
|||
final Logger _logger = Logger((_VerifyRecoveryPageState).toString());
|
||||
|
||||
void _verifyRecoveryKey() async {
|
||||
final dialog = createProgressDialog(context, "Verifying recovery key...");
|
||||
final dialog =
|
||||
createProgressDialog(context, S.of(context).verifyingRecoveryKey);
|
||||
await dialog.show();
|
||||
try {
|
||||
final String inputKey = _recoveryKey.text.trim();
|
||||
|
@ -58,10 +60,8 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
|||
// todo: change this as per figma once the component is ready
|
||||
await showErrorDialog(
|
||||
context,
|
||||
"Recovery key verified",
|
||||
"Great! Your recovery key is valid. Thank you for verifying.\n"
|
||||
"\nPlease"
|
||||
" remember to keep your recovery key safely backed up.",
|
||||
S.of(context).recoveryKeyVerified,
|
||||
S.of(context).recoveryKeySuccessBody,
|
||||
);
|
||||
Navigator.of(context).pop();
|
||||
} else {
|
||||
|
@ -70,16 +70,13 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
|||
} catch (e, s) {
|
||||
_logger.severe("failed to verify recovery key", e, s);
|
||||
await dialog.hide();
|
||||
const String errMessage =
|
||||
"The recovery key you entered is not valid. Please make sure it "
|
||||
"contains 24 words, and check the spelling of each.\n\nIf you "
|
||||
"entered an older recovery code, make sure it is 64 characters long, and check each of them.";
|
||||
final String errMessage = S.of(context).invalidRecoveryKey;
|
||||
final result = await showChoiceDialog(
|
||||
context,
|
||||
title: "Invalid key",
|
||||
title: S.of(context).invalidKey,
|
||||
body: errMessage,
|
||||
firstButtonLabel: "Try again",
|
||||
secondButtonLabel: "View recovery key",
|
||||
firstButtonLabel: S.of(context).tryAgain,
|
||||
secondButtonLabel: S.of(context).viewRecoveryKey,
|
||||
secondButtonAction: ButtonAction.second,
|
||||
);
|
||||
if (result!.action == ButtonAction.second) {
|
||||
|
@ -104,7 +101,7 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
|||
context,
|
||||
RecoveryKeyPage(
|
||||
recoveryKey,
|
||||
"OK",
|
||||
S.of(context).ok,
|
||||
showAppBar: true,
|
||||
onDone: () {
|
||||
Navigator.of(context).pop();
|
||||
|
@ -149,14 +146,14 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
|||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: Text(
|
||||
'Confirm recovery key',
|
||||
S.of(context).confirmRecoveryKey,
|
||||
style: enteTheme.textTheme.h3Bold,
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 18),
|
||||
Text(
|
||||
"Your recovery key is the only way to recover your photos if you forget your password. You can find your recovery key in Settings > Account.\n\nPlease enter your recovery key here to verify that you have saved it correctly.",
|
||||
S.of(context).recoveryKeyVerifyReason,
|
||||
style: enteTheme.textTheme.small
|
||||
.copyWith(color: enteTheme.colorScheme.textMuted),
|
||||
),
|
||||
|
@ -164,7 +161,7 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
|||
TextFormField(
|
||||
decoration: InputDecoration(
|
||||
filled: true,
|
||||
hintText: "Enter your recovery key",
|
||||
hintText: S.of(context).enterYourRecoveryKey,
|
||||
contentPadding: const EdgeInsets.all(20),
|
||||
border: UnderlineInputBorder(
|
||||
borderSide: BorderSide.none,
|
||||
|
@ -197,7 +194,7 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
|||
children: [
|
||||
GradientButton(
|
||||
onTap: _verifyRecoveryKey,
|
||||
text: "Confirm",
|
||||
text: S.of(context).confirm,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
],
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:photos/core/event_bus.dart';
|
|||
import 'package:photos/ente_theme_data.dart';
|
||||
import 'package:photos/events/notification_event.dart';
|
||||
import 'package:photos/events/sync_status_update_event.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/services/sync_service.dart';
|
||||
import 'package:photos/services/user_remote_flag_service.dart';
|
||||
import 'package:photos/theme/text_style.dart';
|
||||
|
@ -100,14 +101,14 @@ class _StatusBarWidgetState extends State<StatusBarWidget> {
|
|||
_showErrorBanner
|
||||
? HeaderErrorWidget(error: _syncError)
|
||||
: const SizedBox.shrink(),
|
||||
UserRemoteFlagService.instance.shouldShowRecoveryVerification()
|
||||
!UserRemoteFlagService.instance.shouldShowRecoveryVerification()
|
||||
? Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12),
|
||||
child: NotificationWidget(
|
||||
startIcon: Icons.error_outline,
|
||||
actionIcon: Icons.arrow_forward,
|
||||
text: "Confirm your recovery key",
|
||||
text: S.of(context).confirmYourRecoveryKey,
|
||||
onTap: () async => {
|
||||
await routeToPage(
|
||||
context,
|
||||
|
|
Loading…
Reference in a new issue