From 90ea374cc3bc0aa074832e97f5f8bb660901539c Mon Sep 17 00:00:00 2001 From: Anya Mallon Date: Thu, 2 May 2024 11:14:35 +0200 Subject: [PATCH 1/6] Update to Save Credentials popover to include Dax logo + new title copy --- .../SecureVault/Extensions/UserText+PasswordManager.swift | 3 ++- .../SecureVault/View/SaveCredentialsViewController.swift | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift b/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift index aefae5c694..0e6acbe0cb 100644 --- a/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift +++ b/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift @@ -20,8 +20,9 @@ import Foundation extension UserText { - static let pmSaveCredentialsEditableTitle = NSLocalizedString("pm.save-credentials.editable.title", value: "Save password?", comment: "Title for the editable Save Credentials popover") + static let pmSaveCredentialsEditableTitle = NSLocalizedString("pm.save-credentials.editable.title", value: "Save Password to DuckDuckGo?", comment: "Title for the editable Save Credentials popover") static let pmSaveCredentialsNonEditableTitle = NSLocalizedString("pm.save-credentials.non-editable.title", value: "New Password Saved", comment: "Title for the non-editable Save Credentials popover") + static let pmUpdateCredentialsTitle = NSLocalizedString("pm.update-credentials.title", value: "Update Password?", comment: "Title for the Update Credentials popover") static let pmEmptyStateDefaultTitle = NSLocalizedString("pm.empty.default.title", value: "No passwords or credit cards saved yet", comment: "Label for default empty state title") static let pmEmptyStateDefaultDescription = NSLocalizedString("pm.empty.default.description", diff --git a/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift b/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift index 02a5595240..d9aebeafbe 100644 --- a/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift +++ b/DuckDuckGo/SecureVault/View/SaveCredentialsViewController.swift @@ -39,6 +39,7 @@ final class SaveCredentialsViewController: NSViewController { return controller } + @IBOutlet var ddgPasswordManagerTitle: NSView! @IBOutlet var titleLabel: NSTextField! @IBOutlet var passwordManagerTitle: NSView! @IBOutlet var passwordManagerAccountLabel: NSTextField! @@ -157,11 +158,11 @@ final class SaveCredentialsViewController: NSViewController { editButton.isHidden = true doneButton.isHidden = true - titleLabel.isHidden = passwordManagerCoordinator.isEnabled + ddgPasswordManagerTitle.isHidden = passwordManagerCoordinator.isEnabled passwordManagerTitle.isHidden = !passwordManagerCoordinator.isEnabled || passwordManagerCoordinator.isLocked passwordManagerAccountLabel.stringValue = UserText.passwordManagementSaveCredentialsAccountLabel(activeVault: passwordManagerCoordinator.activeVaultEmail ?? "") unlockPasswordManagerTitle.isHidden = !passwordManagerCoordinator.isEnabled || !passwordManagerCoordinator.isLocked - titleLabel.stringValue = UserText.pmSaveCredentialsEditableTitle + titleLabel.stringValue = credentials?.account.id == nil ? UserText.pmSaveCredentialsEditableTitle : UserText.pmUpdateCredentialsTitle usernameField.makeMeFirstResponder() } else { notNowSegmentedControl.isHidden = true From 32090234be6b89fe4c6d3c31f38c7a9987b41fea Mon Sep 17 00:00:00 2001 From: Anya Mallon Date: Thu, 2 May 2024 11:15:35 +0200 Subject: [PATCH 2/6] Lock dialog copy update --- .../SecureVault/Extensions/UserText+PasswordManager.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift b/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift index 0e6acbe0cb..e2ba03e0d4 100644 --- a/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift +++ b/DuckDuckGo/SecureVault/Extensions/UserText+PasswordManager.swift @@ -115,7 +115,7 @@ extension UserText { static let pmLockScreenPreferencesLabel = NSLocalizedString("pm.lock-screen.preferences.label", value: "Change in", comment: "Label used for a button that opens preferences") static let pmLockScreenPreferencesLink = NSLocalizedString("pm.lock-screen.preferences.link", value: "Settings", comment: "Label used for a button that opens preferences") - static let pmAutoLockPromptUnlockLogins = NSLocalizedString("pm.lock-screen.prompt.unlock-logins", value: "unlock access to your autofill info", comment: "Label presented when unlocking Autofill") + static let pmAutoLockPromptUnlockLogins = NSLocalizedString("pm.lock-screen.prompt.unlock-logins", value: "unlock your passwords and autofill info for you", comment: "Label presented when unlocking Autofill") static let pmAutoLockPromptExportLogins = NSLocalizedString("pm.lock-screen.prompt.export-logins", value: "export your usernames and passwords", comment: "Label presented when exporting logins") static let pmAutoLockPromptChangeLoginsSettings = NSLocalizedString("pm.lock-screen.prompt.change-settings", value: "change your autofill info access settings", comment: "Label presented when changing Auto-Lock settings") static let pmAutoLockPromptAutofill = NSLocalizedString("pm.lock-screen.prompt.autofill", value: "unlock access to your autofill info", comment: "Label presented when autofilling credit card information") From 43fa3240f8f86e7379189ccad291fb042aa748b6 Mon Sep 17 00:00:00 2001 From: Anya Mallon Date: Thu, 2 May 2024 11:16:22 +0200 Subject: [PATCH 3/6] Settings copy updates --- DuckDuckGo/Common/Localizables/UserText.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo/Common/Localizables/UserText.swift b/DuckDuckGo/Common/Localizables/UserText.swift index e42ac82b75..226510c539 100644 --- a/DuckDuckGo/Common/Localizables/UserText.swift +++ b/DuckDuckGo/Common/Localizables/UserText.swift @@ -392,9 +392,9 @@ struct UserText { static let restartBitwarden = NSLocalizedString("restart.bitwarden", value: "Restart Bitwarden", comment: "Button to restart Bitwarden application") static let restartBitwardenInfo = NSLocalizedString("restart.bitwarden.info", value: "Bitwarden is not responding. Please restart it to initiate the communication again", comment: "This string represents a message informing the user that Bitwarden is not responding and prompts them to restart the application to initiate communication again.") - static let autofillViewContentButtonPasswords = NSLocalizedString("autofill.view-autofill-content.passwords", value: "View Passwords…", comment: "View Password Content Button title in the autofill Settings") - static let autofillViewContentButtonPaymentMethods = NSLocalizedString("autofill.view-autofill-content.payment-methods", value: "View Payment Methods…", comment: "View Payment Methods Content Button title in the autofill Settings") - static let autofillViewContentButtonIdentities = NSLocalizedString("autofill.view-autofill-content.identities", value: "View Identities…", comment: "View Identities Content Button title in the autofill Settings") + static let autofillViewContentButtonPasswords = NSLocalizedString("autofill.view-autofill-content.passwords", value: "Open Passwords…", comment: "View Password Content Button title in the autofill Settings") + static let autofillViewContentButtonPaymentMethods = NSLocalizedString("autofill.view-autofill-content.payment-methods", value: "Open Payment Methods…", comment: "View Payment Methods Content Button title in the autofill Settings") + static let autofillViewContentButtonIdentities = NSLocalizedString("autofill.view-autofill-content.identities", value: "Open Identities…", comment: "View Identities Content Button title in the autofill Settings") static let autofillAskToSave = NSLocalizedString("autofill.ask-to-save", value: "Ask to Save and Autofill", comment: "Autofill settings section title") static let autofillAskToSaveExplanation = NSLocalizedString("autofill.ask-to-save.explanation", value: "Receive prompts to save new information and autofill online forms.", comment: "Description of Autofill autosaving feature - used in settings") static let autofillPasswords = NSLocalizedString("autofill.passwords", value: "Passwords", comment: "Autofill autosaved data type") @@ -406,9 +406,9 @@ struct UserText { static let autofillExcludedSitesResetActionTitle = NSLocalizedString("autofill.excluded-sites.reset.action.title", value: "Reset Excluded Sites?", comment: "Alert title") static let autofillExcludedSitesResetActionMessage = NSLocalizedString("autofill.excluded-sites.reset.action.message", value: "If you reset excluded sites, you will be prompted to save your password next time you sign in to any of these sites.", comment: "Alert title") static let autofillAutoLock = NSLocalizedString("autofill.auto-lock", value: "Auto-lock", comment: "Autofill settings section title") - static let autofillLockWhenIdle = NSLocalizedString("autofill.lock-when-idle", value: "Lock autofill after computer is idle for", comment: "Autofill auto-lock setting") + static let autofillLockWhenIdle = NSLocalizedString("autofill.lock-when-idle", value: "Lock access to passwords and autofill info after computer is idle for", comment: "Autofill auto-lock setting") static let autofillNeverLock = NSLocalizedString("autofill.never-lock", value: "Never lock autofill", comment: "Autofill auto-lock setting") - static let autofillNeverLockWarning = NSLocalizedString("autofill.never-lock-warning", value: "If not locked, anyone with access to your device will be able to use and modify your autofill data. For security purposes, credit card form fill always requires authentication.", comment: "Autofill disabled auto-lock warning") + static let autofillNeverLockWarning = NSLocalizedString("autofill.never-lock-warning", value: "If not locked, anyone with access to your device will be able to use and modify your autofill info. For security purposes, payment method form fill always requires authentication.", comment: "Autofill disabled auto-lock warning") static let autolockLocksFormFill = NSLocalizedString("autofill.autolock-locks-form-filling", value: "Also lock password form fill", comment: "Lock form filling when auto-lock is active text") static let downloadsLocation = NSLocalizedString("downloads.location", value: "Location", comment: "Downloads directory location") From a205ed74370b313296e8cc1c1ef9a567f0182098 Mon Sep 17 00:00:00 2001 From: Anya Mallon Date: Thu, 2 May 2024 11:16:53 +0200 Subject: [PATCH 4/6] Sizing tweak to accomodate settings copy updates --- DuckDuckGo/Preferences/View/PreferencesRootView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/Preferences/View/PreferencesRootView.swift b/DuckDuckGo/Preferences/View/PreferencesRootView.swift index 4c077395c7..e44f3ef209 100644 --- a/DuckDuckGo/Preferences/View/PreferencesRootView.swift +++ b/DuckDuckGo/Preferences/View/PreferencesRootView.swift @@ -37,7 +37,7 @@ enum Preferences { return 355 } } - static let paneContentWidth: CGFloat = 524 + static let paneContentWidth: CGFloat = 544 static let panePaddingHorizontal: CGFloat = 40 static let panePaddingVertical: CGFloat = 40 } From 3fa31cf953b3418c783c10d5d8b1b76c5f4c193d Mon Sep 17 00:00:00 2001 From: Anya Mallon Date: Thu, 2 May 2024 11:17:08 +0200 Subject: [PATCH 5/6] Shortcut copy updates --- DuckDuckGo/Common/Localizables/UserText.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo/Common/Localizables/UserText.swift b/DuckDuckGo/Common/Localizables/UserText.swift index 226510c539..395cd6520b 100644 --- a/DuckDuckGo/Common/Localizables/UserText.swift +++ b/DuckDuckGo/Common/Localizables/UserText.swift @@ -906,8 +906,8 @@ struct UserText { static let bitwardenCommunicationInfo = NSLocalizedString("bitwarden.connect.communication-info", value: "All communication between Bitwarden and DuckDuckGo is encrypted and the data never leaves your device.", comment: "Warns users that all communication between the DuckDuckGo browser and the password manager Bitwarden is encrypted and doesn't leave the user device") static let bitwardenHistoryInfo = NSLocalizedString("bitwarden.connect.history-info", value: "Bitwarden will have access to your browsing history.", comment: "Warn users that the password Manager Bitwarden will have access to their browsing history") - static let showAutofillShortcut = NSLocalizedString("pinning.show-autofill-shortcut", value: "Show Autofill Shortcut", comment: "Menu item for showing the autofill shortcut") - static let hideAutofillShortcut = NSLocalizedString("pinning.hide-autofill-shortcut", value: "Hide Autofill Shortcut", comment: "Menu item for hiding the autofill shortcut") + static let showAutofillShortcut = NSLocalizedString("pinning.show-autofill-shortcut", value: "Show Passwords Shortcut", comment: "Menu item for showing the passwords shortcut") + static let hideAutofillShortcut = NSLocalizedString("pinning.hide-autofill-shortcut", value: "Hide Passwords Shortcut", comment: "Menu item for hiding the passwords shortcut") static let showBookmarksShortcut = NSLocalizedString("pinning.show-bookmarks-shortcut", value: "Show Bookmarks Shortcut", comment: "Menu item for showing the bookmarks shortcut") static let hideBookmarksShortcut = NSLocalizedString("pinning.hide-bookmarks-shortcut", value: "Hide Bookmarks Shortcut", comment: "Menu item for hiding the bookmarks shortcut") From 1bf4adc8b8189fc6f0dd96a1ea8024f06c462cde Mon Sep 17 00:00:00 2001 From: Anya Mallon Date: Thu, 2 May 2024 11:18:55 +0200 Subject: [PATCH 6/6] Copy updates to Localizable.xcstrings --- DuckDuckGo/Localizable.xcstrings | 130 ++++++++++-------- .../View/PasswordManager.storyboard | 45 ++++-- 2 files changed, 104 insertions(+), 71 deletions(-) diff --git a/DuckDuckGo/Localizable.xcstrings b/DuckDuckGo/Localizable.xcstrings index bebbc952e2..5b7bb18c2c 100644 --- a/DuckDuckGo/Localizable.xcstrings +++ b/DuckDuckGo/Localizable.xcstrings @@ -4293,55 +4293,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Autovervollständigen sperren, nachdem der Computer inaktiv war für" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Lock autofill after computer is idle for" + "value" : "Lock access to passwords and autofill info after computer is idle for" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Bloquear autocompletar cuando el ordenador esté inactivo durante" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Verrouiller la saisie automatique après l'inactivité de l'ordinateur pendant" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Blocca la compilazione automatica quando il computer è inattivo per" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Automatisch invullen vergrendelen nadat de computer inactief is geweest" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zablokuj autouzupełnianie, gdy komputer jest bezczynny przez" } }, "pt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Bloquear o preenchimento automático depois de o computador estar inativo durante" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Блокировать автозаполнение после простоя компьютера в течение" } } @@ -4593,55 +4593,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Wenn es nicht gesperrt ist, kann jeder, der Zugriff auf dein Gerät hat, deine Autovervollständigen-Daten verwenden und ändern. Aus Sicherheitsgründen erfordert das Ausfüllen von Kreditkartenformularen immer eine Authentifizierung." } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "If not locked, anyone with access to your device will be able to use and modify your autofill data. For security purposes, credit card form fill always requires authentication." + "value" : "If not locked, anyone with access to your device will be able to use and modify your autofill info. For security purposes, payment method form fill always requires authentication." } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Si no está bloqueado, cualquier persona con acceso a tu dispositivo podrá utilizar y modificar tus datos de autocompletar. Por motivos de seguridad, el formulario de la tarjeta de crédito siempre requiere autenticación." } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "En l'absence de verrouillage, toute personne ayant accès à votre appareil pourra utiliser et modifier vos données de saisie automatique. Pour des raisons de sécurité, le formulaire de carte bancaire nécessite une authentification systématique." } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Se non è bloccata, chiunque abbia accesso al tuo dispositivo potrà utilizzare e modificare i tuoi dati con compilazione automatica. Per motivi di sicurezza, la compilazione del modulo della carta di credito richiede sempre l'autenticazione." } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Indien niet vergrendeld, kan iedereen met toegang tot je apparaat je gegevens voor automatisch invullen gebruiken en wijzigen. Om veiligheidsredenen is verificatie altijd nodig bij het invullen van een creditcardformulier." } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "W przypadku braku blokady każda osoba mająca dostęp do Twojego urządzenia będzie mogła używać danych autouzupełniania i je modyfikować. Ze względów bezpieczeństwa uzupełnianie formularza karty kredytowej zawsze wymaga uwierzytelnienia." } }, "pt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Se não estiver bloqueado, qualquer pessoa com acesso ao teu dispositivo poderá utilizar e modificar os teus dados de preenchimento automático. Por motivos de segurança, o preenchimento do formulário de cartão de crédito requer sempre autenticação." } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "В отсутствие блокировки любой, у кого появится доступ к устройству, сможет использовать или изменить ваши автозаполняемые данные. Из соображений безопасности при заполнении платежных данных в формах всегда требуется аутентификация." } } @@ -5626,7 +5626,7 @@ "en" : { "stringUnit" : { "state" : "new", - "value" : "View Identities…" + "value" : "Open Identities…" } } } @@ -5638,7 +5638,7 @@ "en" : { "stringUnit" : { "state" : "new", - "value" : "View Passwords…" + "value" : "Open Passwords…" } } } @@ -5650,7 +5650,7 @@ "en" : { "stringUnit" : { "state" : "new", - "value" : "View Payment Methods…" + "value" : "Open Payment Methods…" } } } @@ -36993,60 +36993,60 @@ } }, "pinning.hide-autofill-shortcut" : { - "comment" : "Menu item for hiding the autofill shortcut", + "comment" : "Menu item for hiding the passwords shortcut", "extractionState" : "extracted_with_value", "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Autovervollständigungs-Verknüpfung ausblenden" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Hide Autofill Shortcut" + "value" : "Hide Passwords Shortcut" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ocultar acceso directo a Autocompletar" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Masquer le raccourci de saisie automatique" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Nascondi scorciatoia compilazione automatica" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Snelkoppeling voor automatisch invullen verbergen" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ukryj skrót do autouzupełniania" } }, "pt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ocultar atalho de preenchimento automático" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Скрыть ярлык для автозаполнения" } } @@ -37233,60 +37233,60 @@ } }, "pinning.show-autofill-shortcut" : { - "comment" : "Menu item for showing the autofill shortcut", + "comment" : "Menu item for showing the passwords shortcut", "extractionState" : "extracted_with_value", "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Autofill-Verknüpfung anzeigen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Show Autofill Shortcut" + "value" : "Show Passwords Shortcut" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Mostrar acceso directo a Autocompletar" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Afficher le raccourci de saisie automatique" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Mostra scorciatoia compilazione automatica" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Snelkoppeling voor automatisch invullen weergeven" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Pokaż skrót do autouzupełniania" } }, "pt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Mostrar atalho de preenchimento automático" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Показывать ярлык для автозаполнения" } } @@ -39871,55 +39871,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zugang zu deinen Autovervollständigungs-Infos freischalten" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "unlock access to your autofill info" + "value" : "unlock your passwords and autofill info for you" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "desbloquear el acceso a tu información de autocompletar" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "déverrouiller l'accès à vos informations de saisie automatique" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "sblocca l'accesso alla compilazione automatica delle informazioni" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "toegang tot automatisch ingevulde gegevens ontgrendelen" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "odblokuj dostęp do informacji autouzupełniania" } }, "pt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "desbloquear o acesso às tuas informações de preenchimento automático" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "разблокировать доступ к автозаполняемым данным" } } @@ -41731,55 +41731,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Passwort speichern?" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Save password?" + "value" : "Save Password to DuckDuckGo?" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "¿Guardar contraseña?" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Enregistrer le mot de passe ?" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Salvare password?" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Wachtwoord opslaan?" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zapisać hasło?" } }, "pt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Guardar palavra-passe?" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Сохранить пароль?" } } @@ -42325,6 +42325,18 @@ } } }, + "pm.update-credentials.title" : { + "comment" : "Title for the Update Credentials popover", + "extractionState" : "extracted_with_value", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Update Password?" + } + } + } + }, "pm.username" : { "comment" : "Label for username edit field", "extractionState" : "extracted_with_value", diff --git a/DuckDuckGo/SecureVault/View/PasswordManager.storyboard b/DuckDuckGo/SecureVault/View/PasswordManager.storyboard index 2fd6c58259..b69d374e09 100644 --- a/DuckDuckGo/SecureVault/View/PasswordManager.storyboard +++ b/DuckDuckGo/SecureVault/View/PasswordManager.storyboard @@ -429,14 +429,34 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -742,18 +762,18 @@ DQ - + - + @@ -782,11 +802,10 @@ DQ + - - @@ -794,6 +813,7 @@ DQ + @@ -1073,6 +1093,7 @@ DQ +