Browse Source

l10n: extract strings

Neeraj Gupta 2 years ago
parent
commit
c78bc1524f

+ 81 - 2
lib/generated/intl/messages_en.dart

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

+ 430 - 0
lib/generated/l10n.dart

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

+ 53 - 1
lib/l10n/intl_en.arb

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

+ 1 - 1
lib/ui/account/password_entry_page.dart

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

+ 18 - 19
lib/ui/account/password_reentry_page.dart

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

+ 8 - 7
lib/ui/account/recovery_key_page.dart

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

+ 1 - 1
lib/ui/account/sessions_page.dart

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

+ 10 - 9
lib/ui/account/two_factor_authentication_page.dart

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

+ 11 - 10
lib/ui/account/two_factor_recovery_page.dart

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

+ 22 - 22
lib/ui/account/two_factor_setup_page.dart

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

+ 14 - 17
lib/ui/account/verify_recovery_page.dart

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

+ 3 - 2
lib/ui/home/status_bar_widget.dart

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