merge main, fix conflicts

This commit is contained in:
rr-bw 2024-09-13 10:05:57 -07:00
commit de4b1778c1
No known key found for this signature in database
GPG Key ID: 3FA13C3ADEE51D5D
323 changed files with 6478 additions and 1448 deletions

7
.github/CODEOWNERS vendored
View File

@ -106,6 +106,13 @@ apps/web/src/app/layouts @bitwarden/team-design-system
## Desktop native module ## ## Desktop native module ##
apps/desktop/desktop_native @bitwarden/team-platform-dev apps/desktop/desktop_native @bitwarden/team-platform-dev
## Key management team files ##
apps/desktop/src/key-management @bitwarden/team-key-management-dev
apps/web/src/key-management @bitwarden/team-key-management-dev
apps/browser/src/key-management @bitwarden/team-key-management-dev
apps/cli/src/key-management @bitwarden/team-key-management-dev
libs/common/src/key-management @bitwarden/team-key-management-dev
## DevOps team files ## ## DevOps team files ##
/.github/workflows @bitwarden/dept-devops /.github/workflows @bitwarden/dept-devops

View File

@ -138,7 +138,12 @@ jobs:
eval "$(printf '\n' | /usr/bin/gnome-keyring-daemon --start)" eval "$(printf '\n' | /usr/bin/gnome-keyring-daemon --start)"
cargo test -- --test-threads=1 cargo test -- --test-threads=1
- name: Test Windows / macOS - name: Test macOS
if: ${{ matrix.os!='ubuntu-latest' }} if: ${{ matrix.os=='macos-latest' }}
working-directory: ./apps/desktop/desktop_native working-directory: ./apps/desktop/desktop_native
run: cargo test -- --test-threads=1 run: cargo test -- --test-threads=1
- name: Test Windows
if: ${{ matrix.os=='windows-latest'}}
working-directory: ./apps/desktop/desktop_native/core
run: cargo test -- --test-threads=1

View File

@ -1,6 +1,6 @@
{ {
"name": "@bitwarden/browser", "name": "@bitwarden/browser",
"version": "2024.9.0", "version": "2024.9.1",
"scripts": { "scripts": {
"build": "cross-env MANIFEST_VERSION=3 webpack", "build": "cross-env MANIFEST_VERSION=3 webpack",
"build:mv2": "webpack", "build:mv2": "webpack",

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Müəssisə siyasət tələbləri bu ayara tətbiq edildi" "message": "Müəssisə siyasət tələbləri bu ayara tətbiq edildi"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Xarakter sayını göstər" "message": "Xarakter sayını göstər"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Изискванията на политиката за големи компании бяха приложени към тази настройка" "message": "Изискванията на политиката за големи компании бяха приложени към тази настройка"
}, },
"fileSavedToDevice": {
"message": "Файлът е запазен на устройството. Можете да го намерите в мястото за сваляния на устройството."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Показване на броя знаци" "message": "Показване на броя знаци"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Nejsou k dispozici žádná hesla." "message": "Nejsou k dispozici žádná hesla."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Vymazat historii"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Žádná hesla k zobrazení"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Nedávno jste nevygenerovali heslo"
}, },
"remove": { "remove": {
"message": "Odebrat" "message": "Odebrat"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Na toto nastavení byly uplatněny požadavky podnikových zásad" "message": "Na toto nastavení byly uplatněny požadavky podnikových zásad"
}, },
"fileSavedToDevice": {
"message": "Soubor byl uložen. Můžete jej nalézt ve stažené složce v zařízení."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Zobrazit počet znaků" "message": "Zobrazit počet znaků"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Der er ingen kodeord at vise." "message": "Der er ingen kodeord at vise."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Ryd historik"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Ingen adgangskoder at vise"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Der er ikke genereret nogen adgangskode for nylig"
}, },
"remove": { "remove": {
"message": "Fjern" "message": "Fjern"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Virksomhedspolitikkrav er anvendt på denne indstilling" "message": "Virksomhedspolitikkrav er anvendt på denne indstilling"
}, },
"fileSavedToDevice": {
"message": "Fil gemt på enheden. Håndtér fra enhedens downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Vis tegnantal" "message": "Vis tegnantal"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Unternehmens-Richtlinienanforderungen wurden auf diese Einstellung angewandt" "message": "Unternehmens-Richtlinienanforderungen wurden auf diese Einstellung angewandt"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Zeichenanzahl anzeigen" "message": "Zeichenanzahl anzeigen"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Οι απαιτήσεις της πολιτικής για επιχειρήσεις έχουν εφαρμοστεί σε αυτήν τη ρύθμιση" "message": "Οι απαιτήσεις της πολιτικής για επιχειρήσεις έχουν εφαρμοστεί σε αυτήν τη ρύθμιση"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -194,6 +194,18 @@
"addItem": { "addItem": {
"message": "Add item" "message": "Add item"
}, },
"accountEmail": {
"message": "Account email"
},
"requestHint": {
"message": "Request hint"
},
"requestPasswordHint": {
"message": "Request password hint"
},
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
"message": "Enter your account email address and your password hint will be sent to you"
},
"passwordHint": { "passwordHint": {
"message": "Password hint" "message": "Password hint"
}, },
@ -910,7 +922,7 @@
"message": "List card items on the Tab page for easy autofill." "message": "List card items on the Tab page for easy autofill."
}, },
"showIdentitiesInVaultView": { "showIdentitiesInVaultView": {
"message": "Show identifies as Autofill suggestions on Vault view" "message": "Show identities as Autofill suggestions on Vault view"
}, },
"showIdentitiesCurrentTab": { "showIdentitiesCurrentTab": {
"message": "Show identities on Tab page" "message": "Show identities on Tab page"
@ -1945,7 +1957,7 @@
}, },
"lock": { "lock": {
"message": "Lock", "message": "Lock",
"description": "Verb form: to make secure or inaccesible by" "description": "Verb form: to make secure or inaccessible by"
}, },
"trash": { "trash": {
"message": "Trash", "message": "Trash",
@ -4327,6 +4339,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Yrityskäytännön vaatimuksia on sovellettu tähän asetukseen" "message": "Yrityskäytännön vaatimuksia on sovellettu tähän asetukseen"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Aucun mot de passe à afficher." "message": "Aucun mot de passe à afficher."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Effacer l'historique"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Aucun mot de passe à afficher"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Vous n'avez pas généré de mot de passe récemment"
}, },
"remove": { "remove": {
"message": "Supprimer" "message": "Supprimer"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Les exigences de la politique d'entreprise ont été appliquées à ce paramètre" "message": "Les exigences de la politique d'entreprise ont été appliquées à ce paramètre"
}, },
"fileSavedToDevice": {
"message": "Fichier enregistré sur l'appareil. Gérez à partir des téléchargements de votre appareil."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Afficher le nombre de caractères" "message": "Afficher le nombre de caractères"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "इस सेटिंग पर एंटरप्राइज़ नीति आवश्यकताएँ लागू की गई हैं" "message": "इस सेटिंग पर एंटरप्राइज़ नीति आवश्यकताएँ लागू की गई हैं"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Pravila tvrtke primijenjena su na ovu postavku" "message": "Pravila tvrtke primijenjena su na ovu postavku"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Erre a beállításra a vállalkozás rendszabály követelmények lettek alkalmazva." "message": "Erre a beállításra a vállalkozás rendszabály követelmények lettek alkalmazva."
}, },
"fileSavedToDevice": {
"message": "A fájl mentésre került az eszközre. Kezeljük az eszközről a letöltéseket."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Karakterszámláló megjelenítése" "message": "Karakterszámláló megjelenítése"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Non ci sono password da mostrare." "message": "Non ci sono password da mostrare."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Cancella cronologia"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Nessuna password da mostrare"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Non hai generato una password di recente"
}, },
"remove": { "remove": {
"message": "Rimuovi" "message": "Rimuovi"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "I requisiti della policy aziendale sono stati applicati a questa impostazione" "message": "I requisiti della policy aziendale sono stati applicati a questa impostazione"
}, },
"fileSavedToDevice": {
"message": "File salvato sul dispositivo. Gestisci dai download del dispositivo."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "表示するパスワードがありません" "message": "表示するパスワードがありません"
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "履歴を消去"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "パスワードがありません"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "最近パスワードを生成していません"
}, },
"remove": { "remove": {
"message": "削除" "message": "削除"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "エンタープライズポリシー要件がこの設定に適用されました" "message": "エンタープライズポリシー要件がこの設定に適用されました"
}, },
"fileSavedToDevice": {
"message": "ファイルをデバイスに保存しました。デバイスのダウンロードで管理できます。"
},
"showCharacterCount": { "showCharacterCount": {
"message": "文字数を表示" "message": "文字数を表示"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Nav paroļu, ko parādīt." "message": "Nav paroļu, ko parādīt."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Notīrīt vēsturi"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Nav paroļu, ko parādīt"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Pēdējā laikā nav izveidota neviena parole"
}, },
"remove": { "remove": {
"message": "Noņemt" "message": "Noņemt"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Šim iestatījumam tika piemērotas uzņēmējdarbības nosacījumu prasības" "message": "Šim iestatījumam tika piemērotas uzņēmējdarbības nosacījumu prasības"
}, },
"fileSavedToDevice": {
"message": "Datne saglabāta ierīcē. Tā ir atrodama ierīces lejupielāžu mapē."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Rādīt rakstzīmju skaitu" "message": "Rādīt rakstzīmju skaitu"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Er zijn geen wachtwoorden om weer te geven." "message": "Er zijn geen wachtwoorden om weer te geven."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Geschiedenis wissen"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Geen wachtwoorden weer te geven"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Je hebt onlangs geen wachtwoord gegenereerd"
}, },
"remove": { "remove": {
"message": "Verwijderen" "message": "Verwijderen"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Bedrijfsbeleidseisen zijn op deze instelling toegepast" "message": "Bedrijfsbeleidseisen zijn op deze instelling toegepast"
}, },
"fileSavedToDevice": {
"message": "Bestand op apparaat opgeslagen. Beheer vanaf de downloads op je apparaat."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Aantal tekens weergeven" "message": "Aantal tekens weergeven"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Os requisitos de política empresarial foram aplicados nesta configuração" "message": "Os requisitos de política empresarial foram aplicados nesta configuração"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Mostrar contagem de caracteres" "message": "Mostrar contagem de caracteres"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Não existem palavras-passe para listar." "message": "Não existem palavras-passe para listar."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Limpar histórico"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Não há palavras-passe para mostrar"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Não gerou nenhuma palavra-passe recentemente"
}, },
"remove": { "remove": {
"message": "Remover" "message": "Remover"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Os requisitos da política empresarial foram aplicados a esta definição" "message": "Os requisitos da política empresarial foram aplicados a esta definição"
}, },
"fileSavedToDevice": {
"message": "Ficheiro guardado no dispositivo. Gira-o a partir das transferências do seu dispositivo."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Mostrar contagem de caracteres" "message": "Mostrar contagem de caracteres"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "К этой настройке были применены требования корпоративной политики" "message": "К этой настройке были применены требования корпоративной политики"
}, },
"fileSavedToDevice": {
"message": "Файл сохранен на устройстве. Управляйте им из загрузок устройства."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Показать количество символов" "message": "Показать количество символов"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Neboli nájdené žiadne heslá." "message": "Neboli nájdené žiadne heslá."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Vymazať históriu"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Žiadne heslá na zobrazenie"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "V poslednej dobe ste negenerovali žiadne heslá"
}, },
"remove": { "remove": {
"message": "Odstrániť" "message": "Odstrániť"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Na toto nastavenie boli uplatnené požiadavky pravidiel spoločnosti" "message": "Na toto nastavenie boli uplatnené požiadavky pravidiel spoločnosti"
}, },
"fileSavedToDevice": {
"message": "Súbor sa uložil do zariadenia. Spravujte stiahnuté súbory zo zariadenia."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Zobraziť počítadlo znakov" "message": "Zobraziť počítadlo znakov"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Захтеви политике предузећа су примењени на ово подешавање" "message": "Захтеви политике предузећа су примењени на ово подешавање"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,10 +1797,10 @@
"message": "Det finns inga lösenord att lista." "message": "Det finns inga lösenord att lista."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Rensa historik"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Inga lösenord att visa"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "You haven't generated a password recently"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Visa antal tecken" "message": "Visa antal tecken"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -266,7 +266,7 @@
"message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website" "message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website"
}, },
"bitwardenSecretsManager": { "bitwardenSecretsManager": {
"message": "Bitwarden Sır Yöneticisi" "message": "Bitwarden Secrets Manager"
}, },
"continueToSecretsManagerPageDesc": { "continueToSecretsManagerPageDesc": {
"message": "Securely store, manage, and share developer secrets with Bitwarden Secrets Manager. Learn more on the bitwarden.com website." "message": "Securely store, manage, and share developer secrets with Bitwarden Secrets Manager. Learn more on the bitwarden.com website."
@ -1797,13 +1797,13 @@
"message": "Listelenecek parola yok." "message": "Listelenecek parola yok."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Geçmişi temizle"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Gösterilecek parola yok"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Yakın zamanda parola üretmediniz"
}, },
"remove": { "remove": {
"message": "Kaldır" "message": "Kaldır"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Bu ayara kurumsal ilke gereksinimleri uygulandı" "message": "Bu ayara kurumsal ilke gereksinimleri uygulandı"
}, },
"fileSavedToDevice": {
"message": "Dosya cihaza kaydedildi. Cihazınızın indirilenler klasöründen yönetebilirsiniz."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "Немає паролів." "message": "Немає паролів."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Очистити історію"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "Немає паролів"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "Ви не генерували паролі останнім часом"
}, },
"remove": { "remove": {
"message": "Вилучити" "message": "Вилучити"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "До цього налаштування застосовано вимоги політики компанії" "message": "До цього налаштування застосовано вимоги політики компанії"
}, },
"fileSavedToDevice": {
"message": "Файл збережено на пристрої. Ви можете його знайти у теці завантажень."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Показати кількість символів" "message": "Показати кількість символів"
}, },

View File

@ -14,7 +14,7 @@
"message": "Đăng nhập hoặc tạo tài khoản mới để truy cập kho lưu trữ của bạn." "message": "Đăng nhập hoặc tạo tài khoản mới để truy cập kho lưu trữ của bạn."
}, },
"inviteAccepted": { "inviteAccepted": {
"message": "Invitation accepted" "message": "Lời mời được chấp nhận"
}, },
"createAccount": { "createAccount": {
"message": "Tạo tài khoản" "message": "Tạo tài khoản"
@ -69,10 +69,10 @@
"message": "Gợi ý mật khẩu chính (tùy chọn)" "message": "Gợi ý mật khẩu chính (tùy chọn)"
}, },
"joinOrganization": { "joinOrganization": {
"message": "Join organization" "message": "Tham gia tổ chức"
}, },
"finishJoiningThisOrganizationBySettingAMasterPassword": { "finishJoiningThisOrganizationBySettingAMasterPassword": {
"message": "Finish joining this organization by setting a master password." "message": "Hoàn tất gia nhập tổ chức này bằng cách đặt một mật khẩu chính."
}, },
"tab": { "tab": {
"message": "Tab" "message": "Tab"
@ -114,19 +114,19 @@
"message": "Sao chép mã bảo mật" "message": "Sao chép mã bảo mật"
}, },
"copyName": { "copyName": {
"message": "Copy name" "message": "Sao chép tên"
}, },
"copyCompany": { "copyCompany": {
"message": "Copy company" "message": "Copy company"
}, },
"copySSN": { "copySSN": {
"message": "Copy Social Security number" "message": "Số bảo hiểm xã hội"
}, },
"copyPassportNumber": { "copyPassportNumber": {
"message": "Copy passport number" "message": "Sao chép số hộ chiếu"
}, },
"copyLicenseNumber": { "copyLicenseNumber": {
"message": "Copy license number" "message": "Sao chép số giấy phép"
}, },
"autoFill": { "autoFill": {
"message": "Tự động điền" "message": "Tự động điền"
@ -302,10 +302,10 @@
"message": "Chỉnh sửa thư mục" "message": "Chỉnh sửa thư mục"
}, },
"newFolder": { "newFolder": {
"message": "New folder" "message": "Thư mục mới"
}, },
"folderName": { "folderName": {
"message": "Folder name" "message": "Tên thư mục"
}, },
"folderHintText": { "folderHintText": {
"message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
@ -400,7 +400,7 @@
"description": "deprecated. Use specialCharactersLabel instead." "description": "deprecated. Use specialCharactersLabel instead."
}, },
"include": { "include": {
"message": "Include", "message": "Bao gồm",
"description": "Card header for password generator include block" "description": "Card header for password generator include block"
}, },
"uppercaseDescription": { "uppercaseDescription": {
@ -420,7 +420,7 @@
"description": "Label for the password generator lowercase character checkbox" "description": "Label for the password generator lowercase character checkbox"
}, },
"numbersDescription": { "numbersDescription": {
"message": "Include numbers", "message": "Bao gồm cả số",
"description": "Full description for the password generator numbers checkbox" "description": "Full description for the password generator numbers checkbox"
}, },
"numbersLabel": { "numbersLabel": {
@ -428,7 +428,7 @@
"description": "Label for the password generator numbers checkbox" "description": "Label for the password generator numbers checkbox"
}, },
"specialCharactersDescription": { "specialCharactersDescription": {
"message": "Include special characters", "message": "Bao gồm các ký tự đặc biệt",
"description": "Full description for the password generator special characters checkbox" "description": "Full description for the password generator special characters checkbox"
}, },
"specialCharactersLabel": { "specialCharactersLabel": {
@ -684,10 +684,10 @@
"message": "Tài khoản mới của bạn đã được tạo! Bạn có thể đăng nhập từ bây giờ." "message": "Tài khoản mới của bạn đã được tạo! Bạn có thể đăng nhập từ bây giờ."
}, },
"newAccountCreated2": { "newAccountCreated2": {
"message": "Your new account has been created!" "message": "Tài khoản của bạn đã được tạo thành công!"
}, },
"youHaveBeenLoggedIn": { "youHaveBeenLoggedIn": {
"message": "You have been logged in!" "message": "Bạn đã đăng nhập thành công!"
}, },
"youSuccessfullyLoggedIn": { "youSuccessfullyLoggedIn": {
"message": "Bạn đã đăng nhập thành công" "message": "Bạn đã đăng nhập thành công"
@ -1155,7 +1155,7 @@
"message": "Bạn có thể nâng cấp làm thành viên cao cấp trong kho bitwarden nền web. Bạn có muốn truy cập trang web bây giờ?" "message": "Bạn có thể nâng cấp làm thành viên cao cấp trong kho bitwarden nền web. Bạn có muốn truy cập trang web bây giờ?"
}, },
"premiumPurchaseAlertV2": { "premiumPurchaseAlertV2": {
"message": "You can purchase Premium from your account settings on the Bitwarden web app." "message": "Bạn có thể mua gói Premium từ cài đặt tài khoản trên trang Bitwarden."
}, },
"premiumCurrentMember": { "premiumCurrentMember": {
"message": "Bạn là một thành viên cao cấp!" "message": "Bạn là một thành viên cao cấp!"
@ -1176,7 +1176,7 @@
} }
}, },
"premiumPriceV2": { "premiumPriceV2": {
"message": "All for just $PRICE$ per year!", "message": "Tất cả chỉ với $PRICE$ /năm!",
"placeholders": { "placeholders": {
"price": { "price": {
"content": "$1", "content": "$1",
@ -1797,7 +1797,7 @@
"message": "Không có mật khẩu để liệt kê." "message": "Không có mật khẩu để liệt kê."
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "Xóa lịch sử"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "No passwords to show"
@ -1900,10 +1900,10 @@
"message": "Các chính sách của tổ chức đang ảnh hưởng đến cài đặt tạo mật khẩu của bạn." "message": "Các chính sách của tổ chức đang ảnh hưởng đến cài đặt tạo mật khẩu của bạn."
}, },
"passwordGenerator": { "passwordGenerator": {
"message": "Password generator" "message": "Trình tạo mật khẩu"
}, },
"usernameGenerator": { "usernameGenerator": {
"message": "Username generator" "message": "Bộ tạo tên người dùng"
}, },
"useThisPassword": { "useThisPassword": {
"message": "Use this password" "message": "Use this password"
@ -2246,7 +2246,7 @@
"message": "Mật khẩu đã được bảo vệ" "message": "Mật khẩu đã được bảo vệ"
}, },
"copyLink": { "copyLink": {
"message": "Copy link" "message": "Sao chép liên kết"
}, },
"copySendLink": { "copySendLink": {
"message": "Sao chép liên kết mục Gửi", "message": "Sao chép liên kết mục Gửi",
@ -2477,7 +2477,7 @@
"message": "Mật khẩu chính của bạn không đáp ứng chính sách tổ chức của bạn. Để truy cập kho, bạn phải cập nhật mật khẩu chính của mình ngay bây giờ. Việc tiếp tục sẽ đăng xuất bạn khỏi phiên hiện tại và bắt buộc đăng nhập lại. Các phiên hoạt động trên các thiết bị khác có thể tiếp tục duy trì hoạt động trong tối đa một giờ." "message": "Mật khẩu chính của bạn không đáp ứng chính sách tổ chức của bạn. Để truy cập kho, bạn phải cập nhật mật khẩu chính của mình ngay bây giờ. Việc tiếp tục sẽ đăng xuất bạn khỏi phiên hiện tại và bắt buộc đăng nhập lại. Các phiên hoạt động trên các thiết bị khác có thể tiếp tục duy trì hoạt động trong tối đa một giờ."
}, },
"tdeDisabledMasterPasswordRequired": { "tdeDisabledMasterPasswordRequired": {
"message": "Your organization has disabled trusted device encryption. Please set a master password to access your vault." "message": "Tổ chức của bạn đã vô hiệu hóa mã hóa bằng thiết bị đáng tin cậy. Vui lòng đặt mật khẩu chính để truy cập Kho của bạn."
}, },
"resetPasswordPolicyAutoEnroll": { "resetPasswordPolicyAutoEnroll": {
"message": "Đăng ký tự động" "message": "Đăng ký tự động"
@ -2936,7 +2936,7 @@
"message": "Thay đổi phím tắt" "message": "Thay đổi phím tắt"
}, },
"autofillKeyboardManagerShortcutsLabel": { "autofillKeyboardManagerShortcutsLabel": {
"message": "Manage shortcuts" "message": "Quản lý các lối tắt"
}, },
"autofillShortcut": { "autofillShortcut": {
"message": "Phím tắt tự động điền" "message": "Phím tắt tự động điền"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -1797,13 +1797,13 @@
"message": "没有可列出的密码。" "message": "没有可列出的密码。"
}, },
"clearHistory": { "clearHistory": {
"message": "Clear history" "message": "清除历史记录"
}, },
"noPasswordsToShow": { "noPasswordsToShow": {
"message": "No passwords to show" "message": "没有可显示的密码"
}, },
"noRecentlyGeneratedPassword": { "noRecentlyGeneratedPassword": {
"message": "You haven't generated a password recently" "message": "您最近还没有生成过密码"
}, },
"remove": { "remove": {
"message": "移除" "message": "移除"
@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "企业策略要求已应用于此设置" "message": "企业策略要求已应用于此设置"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "显示字符计数" "message": "显示字符计数"
}, },

View File

@ -4309,6 +4309,9 @@
"enterprisePolicyRequirementsApplied": { "enterprisePolicyRequirementsApplied": {
"message": "Enterprise policy requirements have been applied to this setting" "message": "Enterprise policy requirements have been applied to this setting"
}, },
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
},
"showCharacterCount": { "showCharacterCount": {
"message": "Show character count" "message": "Show character count"
}, },

View File

@ -2,7 +2,7 @@
"manifest_version": 2, "manifest_version": 2,
"name": "__MSG_extName__", "name": "__MSG_extName__",
"short_name": "__MSG_appName__", "short_name": "__MSG_appName__",
"version": "2024.9.0", "version": "2024.9.1",
"description": "__MSG_extDesc__", "description": "__MSG_extDesc__",
"default_locale": "en", "default_locale": "en",
"author": "Bitwarden Inc.", "author": "Bitwarden Inc.",

View File

@ -3,7 +3,7 @@
"minimum_chrome_version": "102.0", "minimum_chrome_version": "102.0",
"name": "__MSG_extName__", "name": "__MSG_extName__",
"short_name": "__MSG_appName__", "short_name": "__MSG_appName__",
"version": "2024.9.0", "version": "2024.9.1",
"description": "__MSG_extDesc__", "description": "__MSG_extDesc__",
"default_locale": "en", "default_locale": "en",
"author": "Bitwarden Inc.", "author": "Bitwarden Inc.",

View File

@ -12,17 +12,20 @@ import {
} from "@bitwarden/angular/auth/guards"; } from "@bitwarden/angular/auth/guards";
import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard";
import { generatorSwap } from "@bitwarden/angular/tools/generator/generator-swap"; import { generatorSwap } from "@bitwarden/angular/tools/generator/generator-swap";
import { extensionRefreshRedirect } from "@bitwarden/angular/utils/extension-refresh-redirect";
import { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh-swap"; import { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh-swap";
import { import {
AnonLayoutWrapperComponent, AnonLayoutWrapperComponent,
AnonLayoutWrapperData, AnonLayoutWrapperData,
LoginComponentV2, LoginComponentV2,
LoginSecondaryContentComponent, LoginSecondaryContentComponent,
PasswordHintComponent,
RegistrationFinishComponent, RegistrationFinishComponent,
RegistrationStartComponent, RegistrationStartComponent,
RegistrationStartSecondaryComponent, RegistrationStartSecondaryComponent,
RegistrationStartSecondaryComponentData, RegistrationStartSecondaryComponentData,
SetPasswordJitComponent, SetPasswordJitComponent,
UserLockIcon,
} from "@bitwarden/auth/angular"; } from "@bitwarden/auth/angular";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
@ -103,7 +106,6 @@ import { TrashComponent } from "../vault/popup/settings/trash.component";
import { VaultSettingsV2Component } from "../vault/popup/settings/vault-settings-v2.component"; import { VaultSettingsV2Component } from "../vault/popup/settings/vault-settings-v2.component";
import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.component"; import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.component";
import { extensionRefreshRedirect } from "./extension-refresh-route-utils";
import { debounceNavigationGuard } from "./services/debounce-navigation.service"; import { debounceNavigationGuard } from "./services/debounce-navigation.service";
import { TabsV2Component } from "./tabs-v2.component"; import { TabsV2Component } from "./tabs-v2.component";
import { TabsComponent } from "./tabs.component"; import { TabsComponent } from "./tabs.component";
@ -212,12 +214,6 @@ const routes: Routes = [
canActivate: [unauthGuardFn(unauthRouteOverrides)], canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: { state: "register" }, data: { state: "register" },
}, },
{
path: "hint",
component: HintComponent,
canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: { state: "hint" },
},
{ {
path: "environment", path: "environment",
component: EnvironmentComponent, component: EnvironmentComponent,
@ -384,6 +380,41 @@ const routes: Routes = [
canActivate: [authGuard], canActivate: [authGuard],
data: { state: "update-temp-password" }, data: { state: "update-temp-password" },
}, },
...unauthUiRefreshSwap(
HintComponent,
ExtensionAnonLayoutWrapperComponent,
{
path: "hint",
canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: {
state: "hint",
},
},
{
path: "",
children: [
{
path: "hint",
canActivate: [unauthGuardFn(unauthRouteOverrides)],
data: {
pageTitle: "requestPasswordHint",
pageSubtitle: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
pageIcon: UserLockIcon,
showBackButton: true,
state: "hint",
},
children: [
{ path: "", component: PasswordHintComponent },
{
path: "",
component: EnvironmentSelectorComponent,
outlet: "environment-selector",
},
],
},
],
},
),
...unauthUiRefreshSwap( ...unauthUiRefreshSwap(
LoginComponent, LoginComponent,
ExtensionAnonLayoutWrapperComponent, ExtensionAnonLayoutWrapperComponent,
@ -401,7 +432,7 @@ const routes: Routes = [
data: { data: {
pageTitle: "logInToBitwarden", pageTitle: "logInToBitwarden",
state: "login", state: "login",
}, // TODO-rr-bw: add `satisfies DataProperties & ExtensionAnonLayoutWrapperData }, // TODO-rr-bw: add `satisfies DataProperties & ExtensionAnonLayoutWrapperData}
children: [ children: [
{ path: "", component: LoginComponentV2 }, { path: "", component: LoginComponentV2 },
{ path: "", component: LoginSecondaryContentComponent, outlet: "secondary" }, { path: "", component: LoginSecondaryContentComponent, outlet: "secondary" },

View File

@ -247,7 +247,7 @@ export class AppComponent implements OnInit, OnDestroy {
// Displaying toasts isn't super useful on the popup due to the reloads we do. // Displaying toasts isn't super useful on the popup due to the reloads we do.
// However, it is visible for a moment on the FF sidebar logout. // However, it is visible for a moment on the FF sidebar logout.
private async displayLogoutReason(logoutReason: LogoutReason) { private async displayLogoutReason(logoutReason: LogoutReason) {
let toastOptions: ToastOptions; let toastOptions: ToastOptions | null = null;
switch (logoutReason) { switch (logoutReason) {
case "invalidSecurityStamp": case "invalidSecurityStamp":
case "sessionExpired": { case "sessionExpired": {
@ -260,6 +260,11 @@ export class AppComponent implements OnInit, OnDestroy {
} }
} }
if (toastOptions == null) {
// We don't have anything to show for this particular reason
return;
}
this.toastService.showToast(toastOptions); this.toastService.showToast(toastOptions);
} }
} }

View File

@ -20,6 +20,7 @@ import { AvatarModule, ButtonModule, ToastModule } from "@bitwarden/components";
import { AccountComponent } from "../auth/popup/account-switching/account.component"; import { AccountComponent } from "../auth/popup/account-switching/account.component";
import { CurrentAccountComponent } from "../auth/popup/account-switching/current-account.component"; import { CurrentAccountComponent } from "../auth/popup/account-switching/current-account.component";
import { EnvironmentComponent } from "../auth/popup/environment.component"; import { EnvironmentComponent } from "../auth/popup/environment.component";
import { ExtensionAnonLayoutWrapperComponent } from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component";
import { HintComponent } from "../auth/popup/hint.component"; import { HintComponent } from "../auth/popup/hint.component";
import { HomeComponent } from "../auth/popup/home.component"; import { HomeComponent } from "../auth/popup/home.component";
import { LockComponent } from "../auth/popup/lock.component"; import { LockComponent } from "../auth/popup/lock.component";
@ -131,6 +132,7 @@ import "../platform/popup/locales";
HeaderComponent, HeaderComponent,
UserVerificationDialogComponent, UserVerificationDialogComponent,
CurrentAccountComponent, CurrentAccountComponent,
ExtensionAnonLayoutWrapperComponent,
], ],
declarations: [ declarations: [
ActionButtonsComponent, ActionButtonsComponent,

View File

@ -1 +1 @@
<bit-password-settings /> <bit-password-generator />

View File

@ -1,14 +1,11 @@
import { Component } from "@angular/core"; import { Component } from "@angular/core";
import { import { PasswordGeneratorComponent } from "@bitwarden/generator-components";
PassphraseSettingsComponent,
PasswordSettingsComponent,
} from "@bitwarden/generator-components";
@Component({ @Component({
standalone: true, standalone: true,
selector: "credential-generator", selector: "credential-generator",
templateUrl: "credential-generator.component.html", templateUrl: "credential-generator.component.html",
imports: [PassphraseSettingsComponent, PasswordSettingsComponent], imports: [PasswordGeneratorComponent],
}) })
export class CredentialGeneratorComponent {} export class CredentialGeneratorComponent {}

View File

@ -12,7 +12,7 @@
<i slot="end" class="bwi bwi-angle-right" aria-hidden="true"></i> <i slot="end" class="bwi bwi-angle-right" aria-hidden="true"></i>
</a> </a>
</bit-item> </bit-item>
<bit-item> <bit-item *ngIf="familySponsorshipAvailable$ | async">
<button type="button" bit-item-content (click)="openFreeBitwardenFamiliesPage()"> <button type="button" bit-item-content (click)="openFreeBitwardenFamiliesPage()">
{{ "freeBitwardenFamilies" | i18n }} {{ "freeBitwardenFamilies" | i18n }}
<i slot="end" class="bwi bwi-external-link" aria-hidden="true"></i> <i slot="end" class="bwi bwi-external-link" aria-hidden="true"></i>

View File

@ -4,6 +4,7 @@ import { RouterModule } from "@angular/router";
import { Observable, firstValueFrom } from "rxjs"; import { Observable, firstValueFrom } from "rxjs";
import { JslibModule } from "@bitwarden/angular/jslib.module"; import { JslibModule } from "@bitwarden/angular/jslib.module";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { DialogService, ItemModule } from "@bitwarden/components"; import { DialogService, ItemModule } from "@bitwarden/components";
@ -28,13 +29,16 @@ import { PopupPageComponent } from "../../../../platform/popup/layout/popup-page
}) })
export class MoreFromBitwardenPageV2Component { export class MoreFromBitwardenPageV2Component {
canAccessPremium$: Observable<boolean>; canAccessPremium$: Observable<boolean>;
protected familySponsorshipAvailable$: Observable<boolean>;
constructor( constructor(
private dialogService: DialogService, private dialogService: DialogService,
billingAccountProfileStateService: BillingAccountProfileStateService, billingAccountProfileStateService: BillingAccountProfileStateService,
private environmentService: EnvironmentService, private environmentService: EnvironmentService,
private organizationService: OrganizationService,
) { ) {
this.canAccessPremium$ = billingAccountProfileStateService.hasPremiumFromAnySource$; this.canAccessPremium$ = billingAccountProfileStateService.hasPremiumFromAnySource$;
this.familySponsorshipAvailable$ = this.organizationService.canManageSponsorships$;
} }
async openFreeBitwardenFamiliesPage() { async openFreeBitwardenFamiliesPage() {

View File

@ -13,13 +13,13 @@ import {
const announcementIcon = svgIcon` const announcementIcon = svgIcon`
<svg xmlns="http://www.w3.org/2000/svg" width="86" height="74" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="86" height="74" fill="none">
<g fill-rule="evenodd" clip-path="url(#a)" clip-rule="evenodd"> <g fill-rule="evenodd" clip-path="url(#a)" clip-rule="evenodd">
<path class="tw-fill-text-headers" d="m17.477 51.274 2.472 17.441a3.779 3.779 0 0 0 4.583 3.154l1.497-.342a3.779 3.779 0 0 0 2.759-4.831L23.44 49.91l1.8-.573 5.348 16.784a5.668 5.668 0 0 1-4.138 7.247l-1.497.341a5.668 5.668 0 0 1-6.874-4.73l-2.473-17.44 1.871-.266Z"/> <path class="tw-fill-art-primary" d="m17.477 51.274 2.472 17.441a3.779 3.779 0 0 0 4.583 3.154l1.497-.342a3.779 3.779 0 0 0 2.759-4.831L23.44 49.91l1.8-.573 5.348 16.784a5.668 5.668 0 0 1-4.138 7.247l-1.497.341a5.668 5.668 0 0 1-6.874-4.73l-2.473-17.44 1.871-.266Z"/>
<path class="tw-fill-info-600" d="m55.063 27.1-1.38.316-.211-.92 1.381-.316a3.306 3.306 0 0 1 3.96 2.486l1.052 4.605a3.306 3.306 0 0 1-2.487 3.96l-.92.21-.211-.92.92-.211a2.362 2.362 0 0 0 1.777-2.828l-1.052-4.605a2.362 2.362 0 0 0-2.829-1.777Z"/> <path class="tw-fill-art-accent" d="m55.063 27.1-1.38.316-.211-.92 1.381-.316a3.306 3.306 0 0 1 3.96 2.486l1.052 4.605a3.306 3.306 0 0 1-2.487 3.96l-.92.21-.211-.92.92-.211a2.362 2.362 0 0 0 1.777-2.828l-1.052-4.605a2.362 2.362 0 0 0-2.829-1.777Z"/>
<path class="tw-fill-text-headers" d="M49.79 12.5a.18.18 0 0 0-.272-.11L21.855 29.438a.181.181 0 0 0-.058.055l-.208.323-10.947 2.5a.457.457 0 0 0-.139.064.664.664 0 0 0-.15.135.343.343 0 0 0-.06.095l.499 2.182-4.36.996c-1.873.428-3.086 2.465-2.64 4.417l1.5 6.566c.446 1.951 2.423 3.26 4.296 2.832l4.36-.996.499 2.182c.012.012.04.034.095.06a.658.658 0 0 0 .194.055c.07.009.122.004.152-.003l10.947-2.501.328.2a.18.18 0 0 0 .075.025l32.324 3.344a.18.18 0 0 0 .196-.218L49.79 12.5Zm-1.263-1.72a2.07 2.07 0 0 1 3.104 1.299L60.6 51.332a2.07 2.07 0 0 1-2.233 2.517l-32.323-3.343a2.072 2.072 0 0 1-.474-.106l-10.26 2.344a2.474 2.474 0 0 1-1.571-.184c-.463-.217-.973-.643-1.127-1.32l-.085-.37-2.518.576c-2.975.68-5.9-1.37-6.559-4.253l-1.5-6.566c-.659-2.883 1.086-6 4.061-6.68l2.518-.575-.084-.37c-.155-.677.12-1.282.442-1.678.325-.4.803-.727 1.334-.848l10.262-2.345c.113-.113.24-.214.38-.3l27.664-17.05Z"/> <path class="tw-fill-art-primary" d="M49.79 12.5a.18.18 0 0 0-.272-.11L21.855 29.438a.181.181 0 0 0-.058.055l-.208.323-10.947 2.5a.457.457 0 0 0-.139.064.664.664 0 0 0-.15.135.343.343 0 0 0-.06.095l.499 2.182-4.36.996c-1.873.428-3.086 2.465-2.64 4.417l1.5 6.566c.446 1.951 2.423 3.26 4.296 2.832l4.36-.996.499 2.182c.012.012.04.034.095.06a.658.658 0 0 0 .194.055c.07.009.122.004.152-.003l10.947-2.501.328.2a.18.18 0 0 0 .075.025l32.324 3.344a.18.18 0 0 0 .196-.218L49.79 12.5Zm-1.263-1.72a2.07 2.07 0 0 1 3.104 1.299L60.6 51.332a2.07 2.07 0 0 1-2.233 2.517l-32.323-3.343a2.072 2.072 0 0 1-.474-.106l-10.26 2.344a2.474 2.474 0 0 1-1.571-.184c-.463-.217-.973-.643-1.127-1.32l-.085-.37-2.518.576c-2.975.68-5.9-1.37-6.559-4.253l-1.5-6.566c-.659-2.883 1.086-6 4.061-6.68l2.518-.575-.084-.37c-.155-.677.12-1.282.442-1.678.325-.4.803-.727 1.334-.848l10.262-2.345c.113-.113.24-.214.38-.3l27.664-17.05Z"/>
<path class="tw-fill-info-600" d="m10.792 34.793 3.156 13.814-.92.21L9.87 35.004l.921-.21ZM21.59 29.817l4.246 18.578-.508.12-.512.118L20.68 30.02l.91-.203Z"/> <path class="tw-fill-art-accent" d="m10.792 34.793 3.156 13.814-.92.21L9.87 35.004l.921-.21ZM21.59 29.817l4.246 18.578-.508.12-.512.118L20.68 30.02l.91-.203Z"/>
<path class="tw-fill-text-headers" d="M64.287.59A.945.945 0 0 1 65.58.248c8.784 5.11 15.628 14.039 18.166 25.145 2.537 11.105.25 22.12-5.443 30.538a.945.945 0 0 1-1.565-1.059c5.398-7.98 7.587-18.46 5.166-29.058C79.48 15.215 72.958 6.726 64.629 1.882A.945.945 0 0 1 64.287.59Z"/> <path class="tw-fill-art-primary" d="M64.287.59A.945.945 0 0 1 65.58.248c8.784 5.11 15.628 14.039 18.166 25.145 2.537 11.105.25 22.12-5.443 30.538a.945.945 0 0 1-1.565-1.059c5.398-7.98 7.587-18.46 5.166-29.058C79.48 15.215 72.958 6.726 64.629 1.882A.945.945 0 0 1 64.287.59Z"/>
<path class="tw-fill-info-600" d="M61.6 6.385a.472.472 0 0 1 .643-.18c7.245 4.067 12.949 11.44 15.055 20.66s.171 18.338-4.588 25.149a.472.472 0 0 1-.774-.542c4.603-6.587 6.49-15.431 4.441-24.397-2.048-8.965-7.59-16.113-14.596-20.047a.472.472 0 0 1-.18-.643Z"/> <path class="tw-fill-art-accent" d="M61.6 6.385a.472.472 0 0 1 .643-.18c7.245 4.067 12.949 11.44 15.055 20.66s.171 18.338-4.588 25.149a.472.472 0 0 1-.774-.542c4.603-6.587 6.49-15.431 4.441-24.397-2.048-8.965-7.59-16.113-14.596-20.047a.472.472 0 0 1-.18-.643Z"/>
<path class="tw-fill-text-headers" d="M57.804 11.193a.472.472 0 0 1 .604-.285c6.11 2.186 11.426 8.739 13.364 17.22 1.938 8.48-.006 16.693-4.56 21.315a.472.472 0 1 1-.672-.663c4.27-4.335 6.197-12.187 4.311-20.442-1.886-8.254-7.032-14.49-12.761-16.54a.472.472 0 0 1-.286-.605Z"/> <path class="tw-fill-art-primary" d="M57.804 11.193a.472.472 0 0 1 .604-.285c6.11 2.186 11.426 8.739 13.364 17.22 1.938 8.48-.006 16.693-4.56 21.315a.472.472 0 1 1-.672-.663c4.27-4.335 6.197-12.187 4.311-20.442-1.886-8.254-7.032-14.49-12.761-16.54a.472.472 0 0 1-.286-.605Z"/>
</g> </g>
<defs> <defs>
<clipPath id="a"> <clipPath id="a">

View File

@ -14,7 +14,7 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service"
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { DialogService } from "@bitwarden/components"; import { DialogService, ToastService } from "@bitwarden/components";
@Component({ @Component({
selector: "app-vault-attachments", selector: "app-vault-attachments",
@ -38,6 +38,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On
dialogService: DialogService, dialogService: DialogService,
billingAccountProfileStateService: BillingAccountProfileStateService, billingAccountProfileStateService: BillingAccountProfileStateService,
accountService: AccountService, accountService: AccountService,
toastService: ToastService,
) { ) {
super( super(
cipherService, cipherService,
@ -52,6 +53,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On
dialogService, dialogService,
billingAccountProfileStateService, billingAccountProfileStateService,
accountService, accountService,
toastService,
); );
} }

View File

@ -6,7 +6,6 @@ import { first } from "rxjs/operators";
import { CollectionsComponent as BaseCollectionsComponent } from "@bitwarden/angular/admin-console/components/collections.component"; import { CollectionsComponent as BaseCollectionsComponent } from "@bitwarden/angular/admin-console/components/collections.component";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@ -29,7 +28,6 @@ export class CollectionsComponent extends BaseCollectionsComponent implements On
private route: ActivatedRoute, private route: ActivatedRoute,
private location: Location, private location: Location,
logService: LogService, logService: LogService,
configService: ConfigService,
accountService: AccountService, accountService: AccountService,
toastService: ToastService, toastService: ToastService,
) { ) {
@ -40,7 +38,6 @@ export class CollectionsComponent extends BaseCollectionsComponent implements On
cipherService, cipherService,
organizationService, organizationService,
logService, logService,
configService,
accountService, accountService,
toastService, toastService,
); );

View File

@ -64,7 +64,7 @@
"chalk": "4.1.2", "chalk": "4.1.2",
"commander": "11.1.0", "commander": "11.1.0",
"form-data": "4.0.0", "form-data": "4.0.0",
"https-proxy-agent": "7.0.2", "https-proxy-agent": "7.0.5",
"inquirer": "8.2.6", "inquirer": "8.2.6",
"jsdom": "24.1.3", "jsdom": "24.1.3",
"jszip": "3.10.1", "jszip": "3.10.1",

View File

@ -45,9 +45,9 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
[[package]] [[package]]
name = "arboard" name = "arboard"
version = "3.4.0" version = "3.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fb4009533e8ff8f1450a5bcbc30f4242a1d34442221f72314bea1f5dc9c7f89" checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4"
dependencies = [ dependencies = [
"clipboard-win", "clipboard-win",
"log", "log",

View File

@ -12,7 +12,7 @@ manual_test = []
[dependencies] [dependencies]
aes = "=0.8.4" aes = "=0.8.4"
anyhow = "=1.0.86" anyhow = "=1.0.86"
arboard = { version = "=3.4.0", default-features = false, features = [ arboard = { version = "=3.4.1", default-features = false, features = [
"wayland-data-control", "wayland-data-control",
] } ] }
base64 = "=0.22.1" base64 = "=0.22.1"

View File

@ -25,7 +25,7 @@
"**/node_modules/argon2/package.json", "**/node_modules/argon2/package.json",
"**/node_modules/argon2/build/Release/argon2.node" "**/node_modules/argon2/build/Release/argon2.node"
], ],
"electronVersion": "32.0.1", "electronVersion": "32.0.2",
"generateUpdatesFilesForAllChannels": true, "generateUpdatesFilesForAllChannels": true,
"publish": { "publish": {
"provider": "generic", "provider": "generic",

View File

@ -16,11 +16,13 @@ import {
AnonLayoutWrapperData, AnonLayoutWrapperData,
LoginComponentV2, LoginComponentV2,
LoginSecondaryContentComponent, LoginSecondaryContentComponent,
PasswordHintComponent,
RegistrationFinishComponent, RegistrationFinishComponent,
RegistrationStartComponent, RegistrationStartComponent,
RegistrationStartSecondaryComponent, RegistrationStartSecondaryComponent,
RegistrationStartSecondaryComponentData, RegistrationStartSecondaryComponentData,
SetPasswordJitComponent, SetPasswordJitComponent,
UserLockIcon,
} from "@bitwarden/auth/angular"; } from "@bitwarden/auth/angular";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
@ -93,7 +95,6 @@ const routes: Routes = [
canActivate: [authGuard], canActivate: [authGuard],
}, },
{ path: "accessibility-cookie", component: AccessibilityCookieComponent }, { path: "accessibility-cookie", component: AccessibilityCookieComponent },
{ path: "hint", component: HintComponent },
{ path: "set-password", component: SetPasswordComponent }, { path: "set-password", component: SetPasswordComponent },
{ path: "sso", component: SsoComponent }, { path: "sso", component: SsoComponent },
{ {
@ -112,6 +113,41 @@ const routes: Routes = [
canActivate: [authGuard], canActivate: [authGuard],
data: { titleId: "removeMasterPassword" }, data: { titleId: "removeMasterPassword" },
}, },
...unauthUiRefreshSwap(
HintComponent,
AnonLayoutWrapperComponent,
{
path: "hint",
canActivate: [unauthGuardFn()],
data: {
pageTitle: "passwordHint",
titleId: "passwordHint",
},
},
{
path: "",
children: [
{
path: "hint",
canActivate: [unauthGuardFn()],
data: {
pageTitle: "requestPasswordHint",
pageSubtitle: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
pageIcon: UserLockIcon,
state: "hint",
},
children: [
{ path: "", component: PasswordHintComponent },
{
path: "",
component: EnvironmentSelectorComponent,
outlet: "environment-selector",
},
],
},
],
},
),
...unauthUiRefreshSwap( ...unauthUiRefreshSwap(
LoginComponent, LoginComponent,
AnonLayoutWrapperComponent, AnonLayoutWrapperComponent,

View File

@ -194,9 +194,9 @@ export class AppComponent implements OnInit, OnDestroy {
break; break;
case "loggedOut": case "loggedOut":
this.modalService.closeAll(); this.modalService.closeAll();
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. if (message.userId == null || message.userId === this.activeUserId) {
// eslint-disable-next-line @typescript-eslint/no-floating-promises await this.notificationsService.updateConnection();
this.notificationsService.updateConnection(); }
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
// eslint-disable-next-line @typescript-eslint/no-floating-promises // eslint-disable-next-line @typescript-eslint/no-floating-promises
this.updateAppMenu(); this.updateAppMenu();
@ -694,9 +694,7 @@ export class AppComponent implements OnInit, OnDestroy {
// This must come last otherwise the logout will prematurely trigger // This must come last otherwise the logout will prematurely trigger
// a process reload before all the state service user data can be cleaned up // a process reload before all the state service user data can be cleaned up
if (userBeingLoggedOut === activeUserId) { this.authService.logOut(async () => {}, userBeingLoggedOut);
this.authService.logOut(async () => {});
}
} }
private async recordActivity() { private async recordActivity() {

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "خطأ في تحديث رمز الوصول" "message": "خطأ في تحديث رمز الوصول"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Müraciət tokeni təzələmə xətası" "message": "Müraciət tokeni təzələmə xətası"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "SSO giriş üçün açıq port tapıla bilmədi." "message": "SSO giriş üçün açıq port tapıla bilmədi."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Грешка при опресняването на идентификатора за достъп" "message": "Грешка при опресняването на идентификатора за достъп"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "Не могат да бъдат открити свободни портове за еднократната идентификация." "message": "Не могат да бъдат открити свободни портове за еднократната идентификация."
},
"fileSavedToDevice": {
"message": "Файлът е запазен на устройството. Можете да го намерите в мястото за сваляния на устройството."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Kopírování bylo úspěšné"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Chyba aktualizace přístupového tokenu" "message": "Chyba aktualizace přístupového tokenu"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "Pro přihlášení SSO nebyly nalezeny žádné volné porty." "message": "Pro přihlášení SSO nebyly nalezeny žádné volné porty."
},
"fileSavedToDevice": {
"message": "Soubor byl uložen. Můžete jej nalézt ve stažené složce v zařízení."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Kopieret"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Adgangstoken genopfriskningsfejl" "message": "Adgangstoken genopfriskningsfejl"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "Ingen ledige porte fundet til SSO-login." "message": "Ingen ledige porte fundet til SSO-login."
},
"fileSavedToDevice": {
"message": "Fil gemt på enheden. Håndtér fra enhedens downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Zugangs-Token Aktualisierungsfehler" "message": "Zugangs-Token Aktualisierungsfehler"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "Es konnten keine freien Ports für die SSO-Anmeldung gefunden werden." "message": "Es konnten keine freien Ports für die SSO-Anmeldung gefunden werden."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Σφάλμα Ανανέωσης Διακριτικού Πρόσβασης" "message": "Σφάλμα Ανανέωσης Διακριτικού Πρόσβασης"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "Δεν βρέθηκαν ελεύθερες θύρες για τη σύνδεση sso." "message": "Δεν βρέθηκαν ελεύθερες θύρες για τη σύνδεση sso."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -578,6 +578,18 @@
"settings": { "settings": {
"message": "Settings" "message": "Settings"
}, },
"accountEmail": {
"message": "Account email"
},
"requestHint": {
"message": "Request hint"
},
"requestPasswordHint": {
"message": "Request password hint"
},
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
"message": "Enter your account email address and your password hint will be sent to you"
},
"passwordHint": { "passwordHint": {
"message": "Password hint" "message": "Password hint"
}, },
@ -1303,6 +1315,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -1648,7 +1663,7 @@
}, },
"lock": { "lock": {
"message": "Lock", "message": "Lock",
"description": "Verb form: to make secure or inaccesible by" "description": "Verb form: to make secure or inaccessible by"
}, },
"trash": { "trash": {
"message": "Trash", "message": "Trash",
@ -3079,5 +3094,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -841,7 +841,7 @@
"message": "Ŝargado..." "message": "Ŝargado..."
}, },
"lockVault": { "lockVault": {
"message": "Lock vault" "message": "Ŝlosi la trezorejon"
}, },
"passwordGenerator": { "passwordGenerator": {
"message": "Password generator" "message": "Password generator"
@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Access Token Refresh Error" "message": "Access Token Refresh Error"
}, },
@ -1535,7 +1538,7 @@
"message": "Additional Touch ID settings" "message": "Additional Touch ID settings"
}, },
"touchIdConsentMessage": { "touchIdConsentMessage": {
"message": "unlock your vault" "message": "malŝlosi vian trezorejon"
}, },
"autoPromptWindowsHello": { "autoPromptWindowsHello": {
"message": "Ask for Windows Hello on app start" "message": "Ask for Windows Hello on app start"
@ -2172,7 +2175,7 @@
"message": "Key connector error: make sure key connector is available and working correctly." "message": "Key connector error: make sure key connector is available and working correctly."
}, },
"lockAllVaults": { "lockAllVaults": {
"message": "Lock all vaults" "message": "Ŝlosi ĉiujn trezorejojn"
}, },
"accountLimitReached": { "accountLimitReached": {
"message": "No more than 5 accounts may be logged in at the same time." "message": "No more than 5 accounts may be logged in at the same time."
@ -2281,13 +2284,13 @@
"message": "Servo" "message": "Servo"
}, },
"allVaults": { "allVaults": {
"message": "All vaults" "message": "Ĉiuj trezorejoj"
}, },
"searchOrganization": { "searchOrganization": {
"message": "Search organization" "message": "Search organization"
}, },
"searchMyVault": { "searchMyVault": {
"message": "Search my vault" "message": "Traserĉi mian trezorejon"
}, },
"forwardedEmail": { "forwardedEmail": {
"message": "Forwarded email alias" "message": "Forwarded email alias"
@ -2420,7 +2423,7 @@
"message": "Are you sure you want to use the \"Never\" option? Setting your lock options to \"Never\" stores your vault's encryption key on your device. If you use this option you should ensure that you keep your device properly protected." "message": "Are you sure you want to use the \"Never\" option? Setting your lock options to \"Never\" stores your vault's encryption key on your device. If you use this option you should ensure that you keep your device properly protected."
}, },
"vault": { "vault": {
"message": "Vault" "message": "Trezorejo"
}, },
"loginWithMasterPassword": { "loginWithMasterPassword": {
"message": "Log in with master password" "message": "Log in with master password"
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

View File

@ -1285,6 +1285,9 @@
} }
} }
}, },
"copySuccessful": {
"message": "Copy Successful"
},
"errorRefreshingAccessToken": { "errorRefreshingAccessToken": {
"message": "Error de actualización del token de acceso" "message": "Error de actualización del token de acceso"
}, },
@ -3061,5 +3064,8 @@
}, },
"ssoError": { "ssoError": {
"message": "No free ports could be found for the sso login." "message": "No free ports could be found for the sso login."
},
"fileSavedToDevice": {
"message": "File saved to device. Manage from your device downloads."
} }
} }

Some files were not shown because too many files have changed in this diff Show More