l10n: extract strings

This commit is contained in:
Neeraj Gupta 2023-04-05 01:51:40 +05:30
parent fda7516efd
commit c78bc1524f
No known key found for this signature in database
GPG key ID: 3C5A1684DC1729E1
12 changed files with 652 additions and 91 deletions

View file

@ -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 isnt 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(

View file

@ -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> {

View file

@ -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"
}

View file

@ -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,

View file

@ -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,

View file

@ -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) {

View file

@ -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);

View file

@ -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,
),

View file

@ -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,

View file

@ -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,
),
);
}

View file

@ -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),
],

View file

@ -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,