diff --git a/.eslintignore b/.eslintignore index b6c475d3326..c9a25670a90 100644 --- a/.eslintignore +++ b/.eslintignore @@ -8,7 +8,6 @@ storybook-static **/webpack.*.js **/jest.config.js -**/gulpfile.js apps/browser/config/config.js apps/browser/src/auth/scripts/duo.js diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c050ee1f6c0..cf656967da0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -95,12 +95,14 @@ libs/common/src/autofill @bitwarden/team-autofill-dev apps/desktop/macos/autofill-extension @bitwarden/team-autofill-dev # DuckDuckGo integration apps/desktop/native-messaging-test-runner @bitwarden/team-autofill-dev -apps/desktop/src/services/native-message-handler.service.ts @bitwarden/team-autofill-dev +apps/desktop/src/services/duckduckgo-message-handler.service.ts @bitwarden/team-autofill-dev + ## Component Library ## .storybook @bitwarden/team-design-system libs/components @bitwarden/team-design-system apps/browser/src/platform/popup/layout @bitwarden/team-design-system +apps/browser/src/popup/app-routing.animations.ts @bitwarden/team-design-system apps/web/src/app/layouts @bitwarden/team-design-system ## Desktop native module ## @@ -116,6 +118,7 @@ libs/key-management @bitwarden/team-key-management-dev apps/desktop/destkop_native/core/src/biometric/ @bitwarden/team-key-management-dev apps/desktop/src/services/native-messaging.service.ts @bitwarden/team-key-management-dev apps/browser/src/background/nativeMessaging.background.ts @bitwarden/team-key-management-dev +apps/desktop/src/services/biometric-message-handler.service.ts @bitwarden/team-key-management-dev ## Locales ## apps/browser/src/_locales/en/messages.json diff --git a/.github/renovate.json b/.github/renovate.json index 0172403f0f1..446aa789ebf 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -75,11 +75,6 @@ "concurrently", "cross-env", "del", - "gulp", - "gulp-if", - "gulp-json-editor", - "gulp-replace", - "gulp-zip", "nord", "patch-package", "prettier", diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 350835d0ec7..6e5e11c3361 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -120,7 +120,6 @@ jobs: whoami node --version npm --version - gulp --version docker --version echo "GitHub ref: $GITHUB_REF" echo "GitHub event: $GITHUB_EVENT" diff --git a/apps/browser/package.json b/apps/browser/package.json index ed0a8d36342..53500a83d2b 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/browser", - "version": "2024.11.1", + "version": "2024.11.2", "scripts": { "build": "npm run build:chrome", "build:chrome": "cross-env BROWSER=chrome MANIFEST_VERSION=3 webpack", diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 54952f5e733..45ff01b0b75 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "ملاحظات آمنة" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "مسح", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "نوع اسم المستخدم" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "إعادة إرسال الإشعار" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "عرض جميع خيارات تسجيل الدخول" }, "notificationSentDevice": { "message": "تم إرسال إشعار إلى جهازك." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "بَدْء تسجيل الدخول" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "تُفتح في نافذة جديدة" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "موافقة الجهاز مطلوبة. حدّد خيار الموافقة أدناه:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "تذكر هذا الجهاز" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "لن يتم نسخ Passkey" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index a3fefa68d4e..a21a9626935 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Güvənli qeydlər" }, + "sshKeys": { + "message": "SSH Açarları" + }, "clear": { "message": "Təmizlə", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "E-poçt yarat" }, - "generatorBoundariesHint": { - "message": "Dəyər $MIN$-$MAX$ arasında olmalıdır", + "spinboxBoundariesHint": { + "message": "Dəyər, $MIN$-$MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Güclü bir parol yaratmaq üçün $RECOMMENDED$ və ya daha çox xarakter istifadə edin.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Güclü bir keçid ifadəsi yaratmaq üçün $RECOMMENDED$ və ya daha çox söz istifadə edin.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "İstifadəçi adı növü" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Bildirişi təkrar göndər" }, + "viewAllLogInOptions": { + "message": "Bütün giriş seçimlərinə bax" + }, "viewAllLoginOptions": { "message": "Bütün giriş seçimlərinə bax" }, "notificationSentDevice": { "message": "Cihazınıza bir bildiriş göndərildi." }, + "aNotificationWasSentToYourDevice": { + "message": "Cihazınıza bir bildiriş göndərildi" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Hesabınızın kilidinin açıq olduğuna və barmaq izi ifadəsinin digər cihazda uyuşduğuna əmin olun" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Tələbiniz təsdiqləndikdə bildiriş alacaqsınız" + }, + "needAnotherOptionV1": { + "message": "Başqa bir seçimə ehtiyacınız var?" + }, "loginInitiated": { "message": "Giriş başladıldı" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Yeni bir pəncərədə açılır" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Cihaz təsdiqi tələb olunur. Aşağıdan bir təsdiq variantı seçin:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Bu cihazı xatırla" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "İstifadəçi e-poçtu əskikdir" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Cihaz güvənlidir" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Müraciət edilir" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Keçid açarı kopyalanmır" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtrlər" }, + "filterVault": { + "message": "Seyfi filtrlə" + }, + "filterApplied": { + "message": "Bir filtr tətbiq olundu" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filtr tətbiq olundu", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Şəxsi detallar" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Parol yarat" + }, + "compactMode": { + "message": "Yığcam rejim" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index cb84cfa5014..5ff88dce3a4 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Абароненыя нататкі" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Ачысціць", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тып імя карыстальніка" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Адправіць апавяшчэнне паўторна" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Паглядзець усе варыянты ўваходу" }, "notificationSentDevice": { "message": "Апавяшчэнне было адпраўлена на вашу прыладу." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Ініцыяваны ўваход" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Адкрываць у новым акне" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Патрабуецца ўхваленне прылады. Выберыце параметры ўхвалення ніжэй:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запомніць гэту прыладу" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Адсутнічае электронная пошта карыстальніка" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Давераная прылада" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 5a0854b8a7c..752372210bf 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Защитени бележки" }, + "sshKeys": { + "message": "SSH ключове" + }, "clear": { "message": "Изчистване", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Генериране на електронна поща" }, - "generatorBoundariesHint": { - "message": "Стойността трябва да бъде между $MIN$ и $MAX$", + "spinboxBoundariesHint": { + "message": "Стойността трябва да бъде между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Използвайте поне $RECOMMENDED$ знака, за да генерирате сложна парола.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Използвайте поне $RECOMMENDED$ думи, за да генерирате сложна парола-фраза.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип потребителско име" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Повторно изпращане на известието" }, + "viewAllLogInOptions": { + "message": "Вижте всички възможности за вписване" + }, "viewAllLoginOptions": { "message": "Вижте всички възможности за вписване" }, "notificationSentDevice": { "message": "Към устройството Ви е изпратено известие." }, + "aNotificationWasSentToYourDevice": { + "message": "Към устройството Ви е изпратено известие" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Уверете се, че регистрацията Ви е отключена и че уникалната фраза съвпада с другото устройство" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Ще получите уведомление когато заявката бъде одобрена" + }, + "needAnotherOptionV1": { + "message": "Предпочитате друг вариант?" + }, "loginInitiated": { "message": "Вписването е стартирано" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Отваря се в нов прозорец" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Изисква се одобрение на устройството. Изберете начин за одобрение по-долу:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запомняне на това устройство" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Липсва е-поща на потребителя" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Устройството е доверено" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Използване на" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Секретният ключ няма да бъде копиран" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Филтри" }, + "filterVault": { + "message": "Филтриране на трезора" + }, + "filterApplied": { + "message": "Приложен е един филтър" + }, + "filterAppliedPlural": { + "message": "Приложени са $COUNT$ филтри", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Лични данни" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Генерирана парола" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index b1ba11bdb29..18d214a37da 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "সুরক্ষিত নোট" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "পরিষ্কার", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 3f01ef5dbc8..a4a5f3b27e2 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index e91afa303a8..a1fc62182a2 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Notes segures" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Esborra", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipus de nom d'usuari" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Torna a enviar la notificació" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Veure totes les opcions d'inici de sessió" }, "notificationSentDevice": { "message": "S'ha enviat una notificació al vostre dispositiu." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "S'ha iniciat la sessió" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "S'obri en una finestra nova" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Cal l'aprovació del dispositiu. Seleccioneu una opció d'aprovació a continuació:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Recorda aquest dispositiu" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Falta el correu electrònic de l'usuari" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositiu de confiança" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "La clau de pas no es copiarà" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtres" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Detalls personals" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 0510d17dbf0..03740f06cee 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Zabezpečené poznámky" }, + "sshKeys": { + "message": "SSH klíče" + }, "clear": { "message": "Vymazat", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Vygenerovat e-mail" }, - "generatorBoundariesHint": { - "message": "Hodnota musí být mezi $MIN$ a $MAX$", + "spinboxBoundariesHint": { + "message": "Hodnota musí být mezi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Použijte $RECOMMENDED$ nebo více znaků k vytvoření silného hesla.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Použijte $RECOMMENDED$ slov nebo více slov k vytvoření silné heslové fráze.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Typ uživatelského jména" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Znovu odeslat oznámení" }, + "viewAllLogInOptions": { + "message": "Zobrazit všechny volby přihlášení" + }, "viewAllLoginOptions": { "message": "Zobrazit všechny volby přihlášení" }, "notificationSentDevice": { "message": "Na Vaše zařízení bylo odesláno oznámení." }, + "aNotificationWasSentToYourDevice": { + "message": "Na Vaše zařízení bylo odesláno oznámení" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Ujistěte se, že je Váš trezor odemčen a fráze otisku prstu se shodují s druhým zařízením" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Budete upozorněni, jakmile bude žádost schválena" + }, + "needAnotherOptionV1": { + "message": "Potřebujete další volby?" + }, "loginInitiated": { "message": "Bylo zahájeno přihlášení" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Otevře se v novém okně" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Vyžaduje se schválení zařízení. Vyberte možnost schválení níže:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamatovat toto zařízení" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Chybí e-mail uživatele" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Zařízení zařazeno mezi důvěryhodné" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Přistupování" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Přístupový klíč nebude zkopírován" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtry" }, + "filterVault": { + "message": "Filtrovat trezor" + }, + "filterApplied": { + "message": "Byl použit jeden filtr" + }, + "filterAppliedPlural": { + "message": "Bylo použito $COUNT$ filtrů", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Osobní údaje" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Vygenerované heslo" + }, + "compactMode": { + "message": "Kompaktní režim" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index de65c96e17f..fa175cbd19d 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Nodiadau diogel" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clirio", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Math o enw defnyddiwr" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Gweld pob dewis mewngofnodi" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Cofio'r ddyfais hon" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 0529effb15a..12076e28279 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Sikre notater" }, + "sshKeys": { + "message": "SSH-nøgler" + }, "clear": { "message": "Ryd", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generér e-mail" }, - "generatorBoundariesHint": { - "message": "Værdi skal være mellem $MIN$ og $MAX$", + "spinboxBoundariesHint": { + "message": "Værdi skal være mellem $MIN$ og $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Brug minimum $RECOMMENDED$ tegn for at generere en stærk adgangskode.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Brug minimum $RECOMMENDED$ ord for at generere en stærk adgangssætning.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Brugernavnstype" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Gensend notifikation" }, + "viewAllLogInOptions": { + "message": "Vis alle indlogningsmuligheder" + }, "viewAllLoginOptions": { "message": "Vis alle indlogningsmuligheder" }, "notificationSentDevice": { "message": "En notifikation er sendt til din enhed." }, + "aNotificationWasSentToYourDevice": { + "message": "En notifikation er sendt til enheden" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Sørg for, at boksen er oplåst, samt at fingeraftrykssætningen matcher på den anden enhed" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Man vil få besked, når anmodningen er godkendt" + }, + "needAnotherOptionV1": { + "message": "Behov for en anden mulighed?" + }, "loginInitiated": { "message": "Indlogning påbegyndt" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Åbnes i et nyt vindue" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Enhedsgodkendelse kræves. Vælg en godkendelsesmulighed nedenfor:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Husk denne enhed" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Brugers e-mail mangler" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Enhed betroet" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Tilgår" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Adgangsnøglen kopieres ikke" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtre" }, + "filterVault": { + "message": "Filtrér boks" + }, + "filterApplied": { + "message": "Ét filter anvendt" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filtre anvendt", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personlige oplysninger" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Genereret adgangskode" + }, + "compactMode": { + "message": "Kompakt-tilstand" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index de915ac2717..9113150ab2c 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Sichere Notizen" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Löschen", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "E-Mail generieren" }, - "generatorBoundariesHint": { - "message": "Wert muss zwischen $MIN$ und $MAX$ liegen", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Benutzernamenstyp" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Benachrichtigung erneut senden" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Alle Anmeldeoptionen anzeigen" }, "notificationSentDevice": { "message": "Eine Benachrichtigung wurde an dein Gerät gesendet." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Anmeldung eingeleitet" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Wird in einem neuen Fenster geöffnet" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Geräte-Genehmigung erforderlich. Wähle unten eine Genehmigungsoption aus:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Dieses Gerät merken" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "E-Mail-Adresse des Benutzers fehlt" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Gerät wird vertraut" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Zugriff auf" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey wird nicht kopiert" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filter" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Persönliche Details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generiertes Passwort" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 0e599b6a1d5..c333bf24f6d 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Ασφαλείς σημειώσεις" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Εκκαθάριση", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Τύπος ονόματος χρήστη" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Επαναποστολή ειδοποίησης" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Δείτε όλες τις επιλογές σύνδεσης" }, "notificationSentDevice": { "message": "Μια ειδοποίηση έχει σταλεί στη συσκευή σας." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Η σύνδεση ξεκίνησε" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Ανοίγει σε νέο παράθυρο" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Απαιτείται έγκριση συσκευής. Επιλέξτε μια επιλογή έγκρισης παρακάτω:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Απομνημόνευση αυτής της συσκευής" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Η διεύθυνση ηλ. ταχυδρομείου του χρήστη λείπει" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Αξιόπιστη συσκευή" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Πρόσβαση" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Το κλειδί πρόσβασης δε θα αντιγραφεί" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Φίλτρα" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Προσωπικές πληροφορίες" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 0dc93dd0b32..ab1c6377e6a 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -1125,6 +1125,10 @@ "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "warningCapitalized": { + "message": "Warning", + "description": "Warning (should maintain locale-relevant capitalization)" + }, "confirmVaultExport": { "message": "Confirm vault export" }, @@ -1503,19 +1507,6 @@ "enableAutoFillOnPageLoadDesc": { "message": "If a login form is detected, autofill when the web page loads." }, - "autofillOnPageLoadWarning": { - "message": "$OPENTAG$Warning:$CLOSETAG$ Compromised or untrusted websites can exploit autofill on page load.", - "placeholders": { - "openTag": { - "content": "$1", - "example": "" - }, - "closeTag": { - "content": "$2", - "example": "" - } - } - }, "experimentalFeature": { "message": "Compromised or untrusted websites can exploit autofill on page load." }, @@ -3287,9 +3278,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3363,6 +3363,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3799,6 +3802,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4882,5 +4888,14 @@ }, "beta": { "message": "Beta" + }, + "extensionWidth": { + "message": "Extension width" + }, + "wide": { + "message": "Wide" + }, + "extraWide": { + "message": "Extra wide" } } diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 43b5eba1702..30b04e63dc9 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index c515dae542f..56ed22bfd0f 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username Type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index bd1e097baa9..13e4d9b0030 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Notas seguras" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Limpiar", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo de nombre de usuario" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Reenviar notificación" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Ver todas las opciones de acceso" }, "notificationSentDevice": { "message": "Se ha enviado una notificación a tu dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Inicio de sesión en proceso" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Abre en una nueva ventana" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Se requiere aprobación del dispositivo. Seleccione una opción de aprobación a continuación:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Recordar este dispositivo" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Falta el correo electrónico del usuario" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositivo de confianza" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "La clave de acceso no se copiará" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtros" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Datos personales" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index f3bd66224f1..f7e3f7b135a 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Turvalised märkmed" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Tühjenda", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Kasutajanime tüüp" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Saada märguanne uuesti" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Vaata kõiki valikuid" }, "notificationSentDevice": { "message": "Sinu seadmesse saadeti teavitus." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Sisselogimine on käivitatud" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Avaneb uues aknas" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Nõutav on seadme kinnitamine. Vali kinnitamise meetod alt:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Mäleta seda seadet" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Kasutaja e-post on puudulik" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Seade on usaldusväärne" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Pääsukoodi ei kopeerita" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index 60525eb50f3..db86f978101 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Ohar seguruak" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Ezabatu", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Erabiltzaile izen mota" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Berbidali jakinarazpena" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Ikusi erregistro guztiak ezarpenetan" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Leiho berri batean irekitzen da" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Gogoratu gailu hau" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Erabiltzailearen emaila falta da" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 1f050f7e0ce..b0ac5e86c3e 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "یادداشت‌های امن" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "پاک کردن", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "نوع نام کاربری" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "ارسال مجدد اعلان" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "مشاهده همه گزینه‌های ورود به سیستم" }, "notificationSentDevice": { "message": "یک اعلان به دستگاه شما ارسال شده است." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "ورود به سیستم آغاز شد" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "در پنجره جدید باز می‌شود" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "تأیید دستگاه لازم است. یک روش تأیید انتخاب کنید:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "این دستگاه را به خاطر بسپار" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "ایمیل کاربر وجود ندارد" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "دستگاه مورد اعتماد است" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "کلید عبور کپی نمی‌شود" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index e902e2d241d..2a4edd9cd6f 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Salatut muistiot" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Tyhjennä", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Luo sähköpostiosoite" }, - "generatorBoundariesHint": { - "message": "Arvon tulee olla väliltä $MIN$—$MAX$", + "spinboxBoundariesHint": { + "message": "Arvon tulee olla väliltä $MIN$—$MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Käytä $RECOMMENDED$ tai useampaa merkkiä vahvan salasanan luomiseen.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Käytä $RECOMMENDED$ tai useampaa sanaa vahvan salalauseen luomiseen.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Käyttäjätunnuksen tyyppi" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Lähetä ilmoitus uudelleen" }, + "viewAllLogInOptions": { + "message": "Näytä kaikki kirjautumisvaihtoehdot" + }, "viewAllLoginOptions": { "message": "Näytä kaikki kirjautumisvaihtoehdot" }, "notificationSentDevice": { "message": "Laitteellesi on lähetetty ilmoitus." }, + "aNotificationWasSentToYourDevice": { + "message": "Laitteeseesi lähetettiin ilmoitus" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Sinulle ilmoitetaan, kun pyyntö on hyväksytty" + }, + "needAnotherOptionV1": { + "message": "Tarvitsetko toisen vaihtoehdon?" + }, "loginInitiated": { "message": "Kirjautuminen aloitettu" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Avautuu uudessa ikkunassa" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Laitehyväksyntä vaaditaan. Valitse hyväksyntätapa alta:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Muista tämä laite" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Käyttäjän sähköpostiosoite puuttuu" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Laitteeseen luotettu" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Avataan" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Pääsyavainta ei kopioida" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Suodattimet" }, + "filterVault": { + "message": "Suodata holvi" + }, + "filterApplied": { + "message": "Yksi suodatin käytössä" + }, + "filterAppliedPlural": { + "message": "$COUNT$ suodatinta käytössä", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Henkilökohtaiset tiedot" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Luotu salasana" + }, + "compactMode": { + "message": "Pienikokoinen tila" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index c077a8704c5..ab067bc9b8d 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Mga Secure Note" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Hilahin", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Uri ng username" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Muling ipadala ang abiso" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Tingnan ang lahat ng mga pagpipilian sa pag log in" }, "notificationSentDevice": { "message": "Naipadala na ang notification sa iyong device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index c32445ae96a..f2e0658474c 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Notes sécurisées" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Effacer", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Générer un courriel" }, - "generatorBoundariesHint": { - "message": "La valeur doit être comprise entre $MIN$ et $MAX$", + "spinboxBoundariesHint": { + "message": "La valeur doit être comprise entre $MIN$ et $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Utilisez $RECOMMENDED$ caractères ou plus pour générer un mot de passe fort.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Utilisez $RECOMMENDED$ mots ou plus pour générer une phrase de passe forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Type de nom d'utilisateur" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Renvoyer la notification" }, + "viewAllLogInOptions": { + "message": "Afficher toutes les options de connexion" + }, "viewAllLoginOptions": { "message": "Afficher toutes les options de connexion" }, "notificationSentDevice": { "message": "Une notification a été envoyée à votre appareil." }, + "aNotificationWasSentToYourDevice": { + "message": "Une notification a été envoyée à votre appareil" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Assurez-vous que votre compte est déverrouillé et que la phrase d'empreinte correspond à l'autre appareil" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Vous serez notifié une fois que la demande sera approuvée" + }, + "needAnotherOptionV1": { + "message": "Besoin d'une autre option ?" + }, "loginInitiated": { "message": "Connexion initiée" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "S'ouvre dans une nouvelle fenêtre" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "L'approbation de l'appareil est requise. Sélectionnez une option d'approbation ci-dessous :" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Se souvenir de cet appareil" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Courriel de l'utilisateur manquant" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Appareil de confiance" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accès en cours" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "La clé d'identification (passkey) ne sera pas copiée" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtres" }, + "filterVault": { + "message": "Filtrer le coffre" + }, + "filterApplied": { + "message": "Un filtre a été appliqué" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filtres appliqués", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Données personnelles" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Mot de passe généré" + }, + "compactMode": { + "message": "Mode compact" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index c128b556bdb..d1697b4dc57 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Notas seguras" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Limpar", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 4c200333464..692d6f166dd 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "פתקים מאובטחים" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "נקה", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "סוג שם משתמש" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 82a1190cd48..050a4021a53 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure Notes" }, + "sshKeys": { + "message": "SSH कुँजी" + }, "clear": { "message": "खाली करें", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "ऐक्सेसिंग" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "फ़िल्टर" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 3521a247a06..ec139250452 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Sigurne bilješke" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Očisti", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tip korisničkog imena" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Ponovno pošalji obavijest" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Pogledaj sve mogućnosti prijave" }, "notificationSentDevice": { "message": "Obavijest je poslana na tvoj uređaj." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Prijava pokrenuta" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Otvara u novom prozoru" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Potrebno je odobriti uređaj. Odaberi metodu odobravanja:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamti ovaj uređaj" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Nedostaje e-pošta korisnika" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Uređaj pouzdan" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Pristupanje" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Pristupni ključ neće biti kopiran" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtri" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Osobni podaci" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index cffb6ac3ea1..4c42fc4f452 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Biztonságos jegyzetek" }, + "sshKeys": { + "message": "SSH kulcsok" + }, "clear": { "message": "Kiürítés", "description": "To clear something out. example: To clear browser history." @@ -2889,7 +2892,7 @@ "generateEmail": { "message": "Email generálása" }, - "generatorBoundariesHint": { + "spinboxBoundariesHint": { "message": "Az érték legyen $MIN$ és $MAX$ között.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Használjunk $RECOMMENDED$ vagy több karaktert egy erős jelszó előállításához.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " $RECOMMENDED$ vagy több szó erős jelmondat generálásához.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Felhasználónév típusa" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Értesítés újraküldése" }, + "viewAllLogInOptions": { + "message": "Összes bejelentkezési opció megtekintése" + }, "viewAllLoginOptions": { "message": "Összes bejelentkezési opció megtekintése" }, "notificationSentDevice": { "message": "Egy értesítés lett elküldve az eszközre." }, + "aNotificationWasSentToYourDevice": { + "message": "Egy értesítés lett elküldve az eszközre." + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Ellenőrizzük, hogy a széf feloldásra került és az ujjlenyomat kifejezés egyezik a másik eszközön levővel." + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "A kérelem jóváhagyása után értesítés érkezik." + }, + "needAnotherOptionV1": { + "message": "Másik opció szükséges?" + }, "loginInitiated": { "message": "A bejelentkezés elindításra került." }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Megnyitás új ablakban" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Az eszköz jóváhagyása szükséges. Válasszunk egy jóváhagyási lehetőséget lentebb:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Eszköz megjegyzése" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "A felhasználói email cím hiányzik." }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Az eszköz megbízható." }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Elérés" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "A hozzáférési kulcs nem kerül másolásra." }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Szűrők" }, + "filterVault": { + "message": "Széf szűrése" + }, + "filterApplied": { + "message": "Egy szűrő került alkalmazásra." + }, + "filterAppliedPlural": { + "message": "$COUNT$ szűrő került alkalmazásra.", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Személyes adatok" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generált jelszó" + }, + "compactMode": { + "message": "Kompakt mód" + }, + "beta": { + "message": "Béta" } } diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index fbfc369ad05..25d3e1cdd9f 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Catatan Aman" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Bersihkan", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Jenis nama pengguna" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 2f42e12a0ee..fe3f7467b2d 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Note sicure" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Cancella", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo di nome utente" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Invia notifica di nuovo" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Visualizza tutte le opzioni di accesso" }, "notificationSentDevice": { "message": "Una notifica è stata inviata al tuo dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Accesso avviato" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Si apre in una nuova finestra" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Approvazione del dispositivo obbligatoria. Seleziona un'opzione di approvazione:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Ricorda questo dispositivo" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Email utente mancante" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositivo fidato" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "La passkey non sarà copiata" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtri" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Dati personali" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 6e9c58e2efe..a1cb2877d89 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "セキュアメモ" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "消去する", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "ユーザー名の種類" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "通知を再送信する" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "すべてのログインオプションを表示" }, "notificationSentDevice": { "message": "デバイスに通知を送信しました。" }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "ログイン開始" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "新しいウィンドウで開く" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "デバイスの承認が必要です。以下から承認オプションを選択してください:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "このデバイスを記憶する" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "ユーザーのメールアドレスがありません" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "信頼されたデバイス" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "アクセス中" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "パスキーはコピーされません" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "フィルター" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "個人情報" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 45d26f402ce..5a0dbf4f9e1 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "გაწმენდა", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "წვდომა" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "ფილტრები" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index a4668a65add..0ae9d0617f3 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index 4ac769431bf..660c8cac25b 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "ಸುರಕ್ಷಿತ ಟಿಪ್ಪಣಿಗಳು" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "ಕ್ಲಿಯರ್‌", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index d86473794a9..e058e32efa8 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "보안 메모" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "삭제", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "아이디 유형" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "이 기기 기억하기" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "패스키가 복사되지 않습니다" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 547d42b27bf..f1e8d4f2235 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -576,7 +576,7 @@ "message": "Pastabos" }, "privateNote": { - "message": "Private note" + "message": "Privati pastaba" }, "note": { "message": "Pastaba" @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Saugūs užrašai" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Išvalyti", "description": "To clear something out. example: To clear browser history." @@ -2361,14 +2364,14 @@ "message": "Excluded domain changes saved" }, "limitSendViews": { - "message": "Limit views" + "message": "Riboti peržiūrų" }, "limitSendViewsHint": { - "message": "No one can view this Send after the limit is reached.", + "message": "Pasiekus ribą, niekas negali peržiūrėti šį „Send“.", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { - "message": "$ACCESSCOUNT$ views left", + "message": "Liko $ACCESSCOUNT$ peržiūrų", "description": "Displayed under the limit views field on Send", "placeholders": { "accessCount": { @@ -2662,7 +2665,7 @@ "message": "Slėpti mano el. pašto adresą nuo gavėjų." }, "hideYourEmail": { - "message": "Hide your email address from viewers." + "message": "Slėpkite savo el. pašto adresą nuo žiūrėtojų." }, "sendOptionsPolicyInEffect": { "message": "Viena ar daugiau organizacijos politikų turi įtakos Jūsų „Send“ nustatymams." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Vartotojo prisijungimo vardo tipas" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Iš naujo siųsti pranešimą" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Pradėtas prisijungimas" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Įrenginio patvirtinimas reikalingas. Pasirink patvirtinimo būdą toliau:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Prisiminti šį įrenginį" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Trūksta naudotojo el. pašto" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Patikimas įrenginys" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtrai" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Asmeniniai duomenys" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 88c08977b7e..0ce6bf97a24 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Drošās piezīmes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Notīrīt", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Izveidot e-pasta adresi" }, - "generatorBoundariesHint": { - "message": "Vērtībai jābūt starp $MIN$ un $MAX$", + "spinboxBoundariesHint": { + "message": "Vērtībai jābūt starp $MIN$ un $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Jāizmanto $RECOMMENDED$ vai vairāk rakstzīmju, la izveidotu spēcīgu paroli.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Jāizmanto $RECOMMENDED$ vai vairāk vārdu, lai aizveidotu spēcīgu parles vārdkopu.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Lietotājvārda veids" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Atkārtoti nosūtīt paziņojumu" }, + "viewAllLogInOptions": { + "message": "Skatīt visas pieteikšanās iespējas" + }, "viewAllLoginOptions": { "message": "Skatīt visas pieteikšanās iespējas" }, "notificationSentDevice": { "message": "Uz ierīci ir nosūtīts paziņojums." }, + "aNotificationWasSentToYourDevice": { + "message": "Uz ierīci tika nosūtīts paziņojums" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Lūgums pārliecināties, ka konts ir atslēgts un atpazīšanas vārdkopa ir tāda pati arī otrā ierīcē" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Tiks paziņots, tiklīdz pieprasījums būs apstiprināts" + }, + "needAnotherOptionV1": { + "message": "Nepieciešama cita iespēja?" + }, "loginInitiated": { "message": "Uzsākta pieteikšanās" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Atver jaunā logā" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Nepieciešams ierīces apstiprinājums. Zemāk jāatlasa apstiprinājuma iespēja:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Atcerēties šo ierīci" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Trūkst lietotāja e-pasta adreses" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Ierīce ir uzticama" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Piekļūst" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Piekļuves atslēga netiks ievietota starpliktuvē" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Atlases" }, + "filterVault": { + "message": "Atlasīt glabātavu" + }, + "filterApplied": { + "message": "Pielietots viens atlasītājs" + }, + "filterAppliedPlural": { + "message": "Pielietoti $COUNT$ atlasītāji", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personiskā informācija" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Izveidotā parole" + }, + "compactMode": { + "message": "Cieši" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index 79fbf209846..ba6a3cc9f22 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "സുരക്ഷാ കുറിപ്പുകൾ" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "മായ്ക്കുക", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 88748b19b95..02e1fa16b75 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index a4668a65add..0ae9d0617f3 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 8a04c78ed5a..bf1312feb21 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Sikre notiser" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Tøm", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Brukernavntype" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Send varslingen på nytt" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Vis alle innloggingsalternativer" }, "notificationSentDevice": { "message": "Et varsel er sendt til enheten din." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Åpnes i et nytt vindu" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Husk denne enheten" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtre" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index a4668a65add..0ae9d0617f3 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 2a9294c3f00..5fddc8f069e 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Veilige notities" }, + "sshKeys": { + "message": "SSH-sleutels" + }, "clear": { "message": "Wissen", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "E-mailadres genereren" }, - "generatorBoundariesHint": { - "message": "Waarde moet tussen $MIN$ en $MAX$ liggen", + "spinboxBoundariesHint": { + "message": "Waarde moet tussen $MIN$ en $MAX$ liggen.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Gebruik $RECOMMENDED$ tekens of meer om een sterk wachtwoord te genereren.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Gebruik $RECOMMENDED$ woorden of meer om een sterke wachtwoordzin te genereren.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Type gebruikersnaam" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Melding opnieuw verzenden" }, + "viewAllLogInOptions": { + "message": "Alle inlogopties bekijken" + }, "viewAllLoginOptions": { "message": "Alle loginopties bekijken" }, "notificationSentDevice": { "message": "Er is een melding naar je apparaat verzonden." }, + "aNotificationWasSentToYourDevice": { + "message": "Er is een melding naar je apparaat verzonden" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Zorg ervoor dat je kluis is ontgrendeld en de vingerafdrukzin hetzelfde is op het andere apparaat" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Je krijgt een melding zodra de aanvraag is goedgekeurd" + }, + "needAnotherOptionV1": { + "message": "Nog een optie nodig?" + }, "loginInitiated": { "message": "Inloggen gestart" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opent in een nieuw venster" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Onthoud dit apparaat om in het vervolg naadloos in te loggen" + }, "deviceApprovalRequired": { "message": "Apparaattoestemming vereist. Kies een goedkeuringsoptie hieronder:" }, + "deviceApprovalRequiredV2": { + "message": "Toestemming apparaat vereist" + }, + "selectAnApprovalOptionBelow": { + "message": "Kies hieronder een goedkeuringsoptie" + }, "rememberThisDevice": { "message": "Dit apparaat onthouden" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Gebruikerse-mailadres ontbreekt" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "E-mailadres voor actieve gebruiker niet gevonden. Je wordt uitgelogd." + }, "deviceTrusted": { "message": "Vertrouwd apparaat" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Toegang verkrijgen" }, + "loggedInExclamation": { + "message": "Ingelogd!" + }, "passkeyNotCopied": { "message": "Passkey wordt niet gekopieerd" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter kluis" + }, + "filterApplied": { + "message": "Eén filter toegepast" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters toegepast", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Persoonlijke gegevens" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Gegenereerd wachtwoord" + }, + "compactMode": { + "message": "Compacte modus" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index a4668a65add..0ae9d0617f3 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index a4668a65add..0ae9d0617f3 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index b8a1f1a2e02..bdfad0f7a7e 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Bezpieczne notatki" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Wyczyść", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Rodzaj nazwy użytkownika" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Wyślij ponownie powiadomienie" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Zobacz wszystkie sposoby logowania" }, "notificationSentDevice": { "message": "Powiadomienie zostało wysłane na urządzenie." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Logowanie rozpoczęte" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Otwiera w nowym oknie" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamiętaj to urządzenie" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Brak adresu e-mail użytkownika" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Zaufano urządzeniu" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Uzyskiwanie dostępu" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey nie zostanie skopiowany" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtry" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Dane osobowe" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 6bdb8fc331b..d9ee8086a50 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Notas seguras" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Limpar", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Gerar e-mail" }, - "generatorBoundariesHint": { - "message": "Valor deve ser entre $MIN$ e $MAX$", + "spinboxBoundariesHint": { + "message": "Valor deve ser entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ caracteres ou mais para gerar uma senha forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use palavras $RECOMMENDED$ ou mais para gerar uma frase secreta forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo de usuário" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Reenviar notificação" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Ver todas as opções de login" }, "notificationSentDevice": { "message": "Uma notificação foi enviada para seu dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login iniciado" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Abrir em uma nova janela" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Aprovação do dispositivo necessária. Selecione uma opção de aprovação abaixo:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Lembrar deste dispositivo" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "E-mail do usuário ausente" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositivo confiável" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Acessando" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "A chave de acesso não será copiada" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtros" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Detalhes pessoais" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Senha gerada" + }, + "compactMode": { + "message": "Modo compacto" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index f7197d512d7..f2498bdfffb 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Notas seguras" }, + "sshKeys": { + "message": "Chaves SSH" + }, "clear": { "message": "Limpar", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Gerar e-mail" }, - "generatorBoundariesHint": { - "message": "O valor deve estar entre $MIN$ e $MAX$", + "spinboxBoundariesHint": { + "message": "O valor deve estar entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Utilize $RECOMMENDED$ caracteres ou mais para gerar uma palavra-passe forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Utilize $RECOMMENDED$ palavras ou mais para gerar uma frase de acesso forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo de nome de utilizador" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Reenviar notificação" }, + "viewAllLogInOptions": { + "message": "Ver todas as opções de início de sessão" + }, "viewAllLoginOptions": { "message": "Ver todas as opções de início de sessão" }, "notificationSentDevice": { "message": "Foi enviada uma notificação para o seu dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "Foi enviada uma notificação para o seu dispositivo" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Certifique-se de que a sua conta está desbloqueada e que a frase de impressão digital corresponde à do outro dispositivo" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Será notificado quando o pedido for aprovado" + }, + "needAnotherOptionV1": { + "message": "Precisa de outra opção?" + }, "loginInitiated": { "message": "A preparar o início de sessão" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Abrir numa nova janela" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Memorizar este dispositivo para facilitar futuros inícios de sessão" + }, "deviceApprovalRequired": { "message": "É necessária a aprovação do dispositivo. Selecione uma opção de aprovação abaixo:" }, + "deviceApprovalRequiredV2": { + "message": "Aprovação do dispositivo necessária" + }, + "selectAnApprovalOptionBelow": { + "message": "Selecione uma opção de aprovação abaixo" + }, "rememberThisDevice": { "message": "Lembrar este dispositivo" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "E-mail do utilizador em falta" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "O e-mail do utilizador ativo não foi encontrado. A terminar a sessão." + }, "deviceTrusted": { "message": "Dispositivo de confiança" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "A aceder" }, + "loggedInExclamation": { + "message": "Sessão iniciada!" + }, "passkeyNotCopied": { "message": "A chave de acesso não será copiada" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtros" }, + "filterVault": { + "message": "Filtrar cofre" + }, + "filterApplied": { + "message": "Um filtro aplicado" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filtros aplicados", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Dados pessoais" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Palavra-passe gerada" + }, + "compactMode": { + "message": "Modo compacto" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 29ee5bf4b49..980341b49f4 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Note securizate" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Ștergere", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tip de nume de utilizator" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Reîntoarceți notificarea" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Afișați toate opțiunile de conectare" }, "notificationSentDevice": { "message": "O notificare a fost trimisă pe dispozitivul dvs." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Conectare inițiată" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Se deschide într-o nouă fereastră" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Este necesară aprobarea dispozitivului. Selectați o opțiune de autorizare de mai jos:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Memorizează acest dispozitiv" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Lipsește e-mailul utilizatorului" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispozitiv de încredere" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index dd6f067f114..87b523cd899 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Защищенные заметки" }, + "sshKeys": { + "message": "Ключи SSH" + }, "clear": { "message": "Очистить", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Сгенерировать email" }, - "generatorBoundariesHint": { - "message": "Значение должно быть между $MIN$ и $MAX$", + "spinboxBoundariesHint": { + "message": "Значение должно быть между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Для создания надежного пароля используйте $RECOMMENDED$ символов или больше.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Для создания надежной парольной фразы используйте $RECOMMENDED$ слов или больше.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип имени пользователя" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Отправить уведомление повторно" }, + "viewAllLogInOptions": { + "message": "Посмотреть все варианты авторизации" + }, "viewAllLoginOptions": { "message": "Посмотреть все варианты авторизации" }, "notificationSentDevice": { "message": "На ваше устройство отправлено уведомление." }, + "aNotificationWasSentToYourDevice": { + "message": "На ваше устройство было отправлено уведомление" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Убедитесь, что ваш аккаунт разблокирован и фраза отпечатка совпадает с фразой на другом устройстве" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Вы получите уведомление, когда запрос будет одобрен" + }, + "needAnotherOptionV1": { + "message": "Нужен другой вариант?" + }, "loginInitiated": { "message": "Вход инициирован" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Откроется в новом окне" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Требуется одобрение устройства. Выберите вариант ниже:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запомнить это устройство" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Отсутствует email пользователя" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Доверенное устройство" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Доступ" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey не будет скопирован" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Фильтры" }, + "filterVault": { + "message": "Фильтр хранилища" + }, + "filterApplied": { + "message": "Применен один фильтр" + }, + "filterAppliedPlural": { + "message": "Применено фильтров: $COUNT$", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Личные данные" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Сгенерированный пароль" + }, + "compactMode": { + "message": "Компактный режим" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index d642e31ba28..4d1eeebc1f9 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "ආරක්ෂිත සටහන්" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "පැහැදිලි", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 9c8a3031164..d44be0f59cf 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Zabezpečené poznámky" }, + "sshKeys": { + "message": "Kľúče SSH" + }, "clear": { "message": "Vyčistiť", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generovať e-mail" }, - "generatorBoundariesHint": { - "message": "Hodnota musí byť medzi $MIN$ a $MAX$", + "spinboxBoundariesHint": { + "message": "Hodnota musí byť medzi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Na vytvorenie silného hesla použite $RECOMMENDED$ znakov alebo viac.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Na vytvorenie silnej prístupovej frázy použite $RECOMMENDED$ slov alebo viac.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Typ používateľského mena" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Znova odoslať upozornenie" }, + "viewAllLogInOptions": { + "message": "Zobraziť všetky možnosti prihlásenia" + }, "viewAllLoginOptions": { "message": "Zobraziť všetky možnosti prihlásenia" }, "notificationSentDevice": { "message": "Do vášho zariadenia bolo odoslané upozornenie." }, + "aNotificationWasSentToYourDevice": { + "message": "Do vášho zariadenia bolo odoslané upozornenie" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Uistite sa, že je váš účet odomknutý a fráza odtlačku prsta sa zhoduje s frázou na druhom zariadení" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Po schválení žiadosti budete informovaní" + }, + "needAnotherOptionV1": { + "message": "Potrebujete inú možnosť?" + }, "loginInitiated": { "message": "Iniciované prihlásenie" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Otvárať v novom okne" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Vyžaduje sa schválenie zariadenia. Vyberte možnosť schválenia nižšie:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamätať si toto zariadenie" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Chýba e-mail používateľa" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dôveryhodné zariadenie" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Pristupovanie" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Prístupový kód sa neskopíruje" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtre" }, + "filterVault": { + "message": "Filtrovať trezor" + }, + "filterApplied": { + "message": "Bol použitý jeden filter" + }, + "filterAppliedPlural": { + "message": "Použitých filtrov ($COUNT$)", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Osobné údaje" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Vygenerované heslo" + }, + "compactMode": { + "message": "Kompaktný režim" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 24ad943bcc4..2ec14a1c5a8 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Zavarovani zapiski" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Počisti", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Vrsta uporabniškega imena" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Odpre se v novem oknu" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index d39949ecd07..112ba3ca3fd 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Сигурносне белешке" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Очисти", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Генеришите имејл" }, - "generatorBoundariesHint": { - "message": "Вредност мора бити између $MIN$ и $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип имена" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Поново послати обавештење" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Погледајте сав извештај у опције" }, "notificationSentDevice": { "message": "Обавештење је послато на ваш уређај." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Пријава је покренута" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Отвара се у новом прозору" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Потребно је одобрење уређаја. Изаберите опцију одобрења испод:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запамти овај уређај" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Недостаје имејл корисника" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Уређај поуздан" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Приступ" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Приступни кључ неће бити копиран" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Филтери" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Личне информације" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index e64855b383e..96bcac046fa 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Säkra anteckningar" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Rensa", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Värde måste vara mellan $MIN$ och $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Använd minst $RECOMMENDED$ tecken för att generera ett starkt lösenord.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Använd minst $RECOMMENDED$ ord för att generera en stark lösenfras.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Typ av användarnamn" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Skicka avisering igen" }, + "viewAllLogInOptions": { + "message": "Visa alla inloggningsalternativ" + }, "viewAllLoginOptions": { "message": "Visa alla inloggningsalternativ" }, "notificationSentDevice": { "message": "En avisering har skickats till din enhet." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Inloggning påbörjad" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Öppnas i ett nytt fönster" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Kom ihåg denna enhet" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Användarens e-postadress saknas" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Enhet betrodd" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Lösennyckeln kommer inte kopieras" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filtrera valv" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index a4668a65add..0ae9d0617f3 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Clear", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index ecac21c82b8..540513662f0 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Secure Notes" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "ลบทิ้ง", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Resend notification" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Login initiated" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Opens in a new window" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Passkey will not be copied" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 7c67428539d..eebefd2bd2a 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -20,16 +20,16 @@ "message": "Hesap oluştur" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "Bitwarden'da yeni misiniz?" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "Geçiş anahtarıyla giriş yap" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Çoklu oturum açma kullan" }, "welcomeBack": { - "message": "Welcome back" + "message": "Tekrar hoş geldiniz" }, "setAStrongPassword": { "message": "Güçlü bir parola belirleyin" @@ -120,7 +120,7 @@ "message": "Parolayı kopyala" }, "copyPassphrase": { - "message": "Copy passphrase" + "message": "Parolayı kopyala" }, "copyNote": { "message": "Notu kopyala" @@ -153,13 +153,13 @@ "message": "Ruhsat numarasını kopyala" }, "copyPrivateKey": { - "message": "Copy private key" + "message": "Özel anahtarı kopyala" }, "copyPublicKey": { - "message": "Copy public key" + "message": "Ortak anahtarı kopyala" }, "copyFingerprint": { - "message": "Copy fingerprint" + "message": "Parmak izini kopyala" }, "copyCustomField": { "message": "$FIELD$ alanını kopyala", @@ -177,7 +177,7 @@ "message": "Notları kopyala" }, "fill": { - "message": "Fill", + "message": "Doldur", "description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible." }, "autoFill": { @@ -327,7 +327,7 @@ "message": "Bitwarden Authenticator" }, "continueToAuthenticatorPageDesc": { - "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, kimlik doğrulama anahtarlarınızı saklama ve 2 aşamalı doğrulama akışları için TOTP anahtarı üretme imkânı sağlar. Bilgi almak için bitwarden.com sitesini ziyaret edin" }, "bitwardenSecretsManager": { "message": "Bitwarden Secrets Manager" @@ -436,7 +436,7 @@ "message": "Parola oluştur" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "Parola üret" }, "regeneratePassword": { "message": "Yeni parola oluştur" @@ -600,7 +600,7 @@ "message": "Web sitesini aç" }, "launchWebsiteName": { - "message": "Launch website $ITEMNAME$", + "message": "$ITEMNAME$ sitesini aç", "placeholders": { "itemname": { "content": "$1", @@ -855,7 +855,7 @@ "message": "Giriş yap" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Bitwarden'a giriş yapın" }, "restartRegistration": { "message": "Kaydı yeniden başlat" @@ -1265,7 +1265,7 @@ "message": "Premium üyeliği bitwarden.com web kasası üzerinden satın alabilirsiniz. Şimdi siteye gitmek ister misiniz?" }, "premiumPurchaseAlertV2": { - "message": "You can purchase Premium from your account settings on the Bitwarden web app." + "message": "Bitwarden web uygulamasındaki hesap ayarlarınızdan Premium abonelik satın alabilirsiniz." }, "premiumCurrentMember": { "message": "Premium üyesiniz!" @@ -1433,7 +1433,7 @@ "message": "Sunucu URL'si" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "Kendi kendine barındırılan sunucu URL'si", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -1774,7 +1774,7 @@ "message": "Kimlik" }, "typeSshKey": { - "message": "SSH key" + "message": "SSH anahtarı" }, "newItemHeader": { "message": "Yeni $TYPE$", @@ -1807,13 +1807,13 @@ "message": "Parola geçmişi" }, "generatorHistory": { - "message": "Generator history" + "message": "Üreteç geçmişi" }, "clearGeneratorHistoryTitle": { - "message": "Clear generator history" + "message": "Üreteç geçmişini temizle" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Devam ederseniz üreteç geçmişindeki tüm kayıtlar kalıcı olarak silinecektir. Devam etmek istediğinizden emin misiniz?" }, "back": { "message": "Geri" @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Güvenli notlar" }, + "sshKeys": { + "message": "SSH anahtarları" + }, "clear": { "message": "Temizle", "description": "To clear something out. example: To clear browser history." @@ -1932,10 +1935,10 @@ "message": "Geçmişi temizle" }, "nothingToShow": { - "message": "Nothing to show" + "message": "Gösterilecek bir şey yok" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "Yakın zamanda herhangi bir şey üretmediniz" }, "remove": { "message": "Kaldır" @@ -2228,10 +2231,10 @@ "message": "Tamam" }, "errorRefreshingAccessToken": { - "message": "Access Token Refresh Error" + "message": "Erişim Anahtarı Yenileme Hatası" }, "errorRefreshingAccessTokenDesc": { - "message": "No refresh token or API keys found. Please try logging out and logging back in." + "message": "Yenileme veya API anahtarı bulunamadı. Lütfen çıkış yapıp tekrar giriş yapmayı deneyin." }, "desktopSyncVerificationTitle": { "message": "Masaüstü eşitleme doğrulaması" @@ -2524,7 +2527,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "Alıcıların bu Send'e erişmesi için isterseniz parola ekleyebilirsiniz.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNotesDesc": { @@ -2887,10 +2890,10 @@ "message": "Kullanıcı adı oluştur" }, "generateEmail": { - "message": "Generate email" + "message": "E-posta üret" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Değer $MIN$ ile $MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Kullanıcı adı türü" }, @@ -2944,11 +2967,11 @@ "message": "Harici bir yönlendirme servisiyle e-posta maskesi oluştur." }, "forwarderDomainName": { - "message": "Email domain", + "message": "E-posta alan adı", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Seçtiğiniz servisin desteklediği bir alan adı seçin", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Bildirimi yeniden gönder" }, + "viewAllLogInOptions": { + "message": "Tüm giriş seçeneklerini gör" + }, "viewAllLoginOptions": { "message": "Tüm giriş seçeneklerini gör" }, "notificationSentDevice": { "message": "Cihazınıza bir bildirim gönderildi." }, + "aNotificationWasSentToYourDevice": { + "message": "Cihazınıza bir bildirim gönderildi" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Lütfen hesabınızın kilidinin açık olduğundan ve parmak izi ifadesinin diğer cihazla eşleştiğinden emin olun" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "İsteğiniz onaylanınca size haber vereceğiz" + }, + "needAnotherOptionV1": { + "message": "Başka bir seçeneğe mi ihtiyacınız var?" + }, "loginInitiated": { "message": "Giriş başlatıldı" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Yeni pencerede açılır" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Cihaz onayı gerekiyor. Lütfen onay yönteminizi seçin:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Bu cihazı hatırla" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Kullanıcının e-postası eksik" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Cihaza güvenildi" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Geçiş anahtarı kopyalanmayacak" }, @@ -3786,7 +3839,7 @@ "message": "Bu siteyle eşleşen hesap bulunamadı" }, "searchSavePasskeyNewLogin": { - "message": "Search or save passkey as new login" + "message": "Geçiş anahtarı ara veya yeni hesap olarak kaydet" }, "confirm": { "message": "Onayla" @@ -4252,6 +4305,21 @@ "filters": { "message": "Filtreler" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Kişisel bilgiler" }, @@ -4576,13 +4644,13 @@ "message": "Kayıt konumu" }, "fileSend": { - "message": "File Send" + "message": "Dosya Send'i" }, "fileSends": { "message": "Dosya Send'leri" }, "textSend": { - "message": "Text Send" + "message": "Metin Send'i" }, "textSends": { "message": "Metin Send'leri" @@ -4606,28 +4674,28 @@ "message": "Bu ayara kurumsal ilke gereksinimleri uygulandı" }, "sshPrivateKey": { - "message": "Private key" + "message": "Özel anahtar" }, "sshPublicKey": { - "message": "Public key" + "message": "Ortak anahtar" }, "sshFingerprint": { - "message": "Fingerprint" + "message": "Parmak izi" }, "sshKeyAlgorithm": { - "message": "Key type" + "message": "Anahtar türü" }, "sshKeyAlgorithmED25519": { "message": "ED25519" }, "sshKeyAlgorithmRSA2048": { - "message": "RSA 2048-Bit" + "message": "RSA 2048 bit" }, "sshKeyAlgorithmRSA3072": { - "message": "RSA 3072-Bit" + "message": "RSA 3072 bit" }, "sshKeyAlgorithmRSA4096": { - "message": "RSA 4096-Bit" + "message": "RSA 4096 bit" }, "retry": { "message": "Yeniden dene" @@ -4672,19 +4740,19 @@ "message": "Kimlik doğrulanıyor" }, "fillGeneratedPassword": { - "message": "Fill generated password", + "message": "Üretilen parolayı doldur", "description": "Heading for the password generator within the inline menu" }, "passwordRegenerated": { - "message": "Password regenerated", + "message": "Parola yeniden üretildi", "description": "Notification message for when a password has been regenerated" }, "saveLoginToBitwarden": { - "message": "Save login to Bitwarden?", + "message": "Hesap Bitwarden'a kaydedilsin mi?", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { - "message": "Space", + "message": "Boşluk", "description": "Represents the space key in screen reader content as a readable word" }, "tildeCharacterDescriptor": { @@ -4692,136 +4760,142 @@ "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { - "message": "Backtick", + "message": "Ters tırnak", "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { - "message": "Exclamation mark", + "message": "Ünlem işareti", "description": "Represents the ! key in screen reader content as a readable word" }, "atSignCharacterDescriptor": { - "message": "At sign", + "message": "At işareti", "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hash sign", + "message": "Kare işareti", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Dollar sign", + "message": "Dolar işareti", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Percent sign", + "message": "Yüzde işareti", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { - "message": "Caret", + "message": "Düzeltme işareti", "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "Ampersand", + "message": "Ve işareti", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { - "message": "Asterisk", + "message": "Yıldız işareti", "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Left parenthesis", + "message": "Sol parantez", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Right parenthesis", + "message": "Sağ parantez", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Underscore", + "message": "Alt çizgi", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { - "message": "Hyphen", + "message": "Tire", "description": "Represents the - key in screen reader content as a readable word" }, "plusCharacterDescriptor": { - "message": "Plus", + "message": "Artı", "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Equals", + "message": "Eşittir", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { - "message": "Left brace", + "message": "Sol küme parantezi", "description": "Represents the { key in screen reader content as a readable word" }, "braceRightCharacterDescriptor": { - "message": "Right brace", + "message": "Sağ küme parantezi", "description": "Represents the } key in screen reader content as a readable word" }, "bracketLeftCharacterDescriptor": { - "message": "Left bracket", + "message": "Sol köşeli parantez", "description": "Represents the [ key in screen reader content as a readable word" }, "bracketRightCharacterDescriptor": { - "message": "Right bracket", + "message": "Sağ köşeli parantez", "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { - "message": "Pipe", + "message": "Çubuk", "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { - "message": "Back slash", + "message": "Ters eğik çizgi", "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { - "message": "Colon", + "message": "İki nokta", "description": "Represents the : key in screen reader content as a readable word" }, "semicolonCharacterDescriptor": { - "message": "Semicolon", + "message": "Noktalı virgül", "description": "Represents the ; key in screen reader content as a readable word" }, "doubleQuoteCharacterDescriptor": { - "message": "Double quote", + "message": "Çift tırnak", "description": "Represents the double quote key in screen reader content as a readable word" }, "singleQuoteCharacterDescriptor": { - "message": "Single quote", + "message": "Tek tırnak", "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Less than", + "message": "Küçüktür", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Greater than", + "message": "Büyüktür", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { - "message": "Comma", + "message": "Virgül", "description": "Represents the , key in screen reader content as a readable word" }, "periodCharacterDescriptor": { - "message": "Period", + "message": "Nokta", "description": "Represents the . key in screen reader content as a readable word" }, "questionCharacterDescriptor": { - "message": "Question mark", + "message": "Soru işareti", "description": "Represents the ? key in screen reader content as a readable word" }, "forwardSlashCharacterDescriptor": { - "message": "Forward slash", + "message": "Bölü işareti", "description": "Represents the / key in screen reader content as a readable word" }, "lowercaseAriaLabel": { - "message": "Lowercase" + "message": "Küçük harf" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "Büyük harf" }, "generatedPassword": { - "message": "Generated password" + "message": "Üretilen parola" + }, + "compactMode": { + "message": "Kompakt mod" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index f0de5d7f4d7..914541bb4ab 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Захищені нотатки" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Стерти", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Генерувати е-пошту" }, - "generatorBoundariesHint": { - "message": "Значення має бути між $MIN$ та $MAX$", + "spinboxBoundariesHint": { + "message": "Значення має бути між $MIN$ та $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Використовуйте $RECOMMENDED$ або більше символів, щоб згенерувати надійний пароль.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Використовуйте $RECOMMENDED$ або більше слів, щоб згенерувати надійну парольну фразу.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип імені користувача" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Надіслати сповіщення ще раз" }, + "viewAllLogInOptions": { + "message": "Переглянути всі варіанти входу" + }, "viewAllLoginOptions": { "message": "Переглянути всі варіанти входу" }, "notificationSentDevice": { "message": "Сповіщення було надіслано на ваш пристрій." }, + "aNotificationWasSentToYourDevice": { + "message": "Сповіщення надіслано на ваш пристрій" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Переконайтеся, що ваш обліковий запис розблоковано і фраза відбитка на іншому пристрої збігається" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Після схвалення запиту ви отримаєте сповіщення" + }, + "needAnotherOptionV1": { + "message": "Потрібен інший варіант?" + }, "loginInitiated": { "message": "Ініційовано вхід" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Відкривається у новому вікні" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Необхідне підтвердження пристрою. Виберіть варіант підтвердження нижче:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запам'ятати цей пристрій" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Немає адреси електронної пошти" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Довірений пристрій" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Доступ" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Ключ доступу не буде скопійовано" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Фільтри" }, + "filterVault": { + "message": "Фільтр сховища" + }, + "filterApplied": { + "message": "Застосовано один фільтр" + }, + "filterAppliedPlural": { + "message": "Застосовані фільтри: $COUNT$", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Особисті дані" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Згенерований пароль" + }, + "compactMode": { + "message": "Компактний режим" + }, + "beta": { + "message": "Бета" } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 05038eb1125..16120158b0f 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "Ghi chú bảo mật" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "Xoá", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Loại tên người dùng" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "Gửi lại thông báo" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Xem tất cả tùy chọn đăng nhập" }, "notificationSentDevice": { "message": "Một thông báo đã được gửi đến thiết bị của bạn." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "Bắt đầu đăng nhập" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "Mở trong cửa sổ mới" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Yêu cầu phê duyệt thiết bị. Chọn một tuỳ chọn phê duyệt bên dưới:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Lưu thiết bị này" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "Thiếu email người dùng" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Thiết bị tin cậy" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "Không thể sao chép mã khoá" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Bộ lọc" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Thông tin cá nhân" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index ad92ca8bbae..67211476aea 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "安全笔记" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "清除", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "生成电子邮件地址" }, - "generatorBoundariesHint": { - "message": "值必须在 $MIN$ 和 $MAX$ 之间", + "spinboxBoundariesHint": { + "message": "值必须在 $MIN$ 和 $MAX$ 之间。", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " 使用 $RECOMMENDED$ 或更多个字符生成强大的密码。", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " 使用 $RECOMMENDED$ 或更多个单词生成强大的密码短语。", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "用户名类型" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "重新发送通知" }, + "viewAllLogInOptions": { + "message": "查看所有登录选项" + }, "viewAllLoginOptions": { "message": "查看所有登录选项" }, "notificationSentDevice": { "message": "通知已发送到您的设备。" }, + "aNotificationWasSentToYourDevice": { + "message": "通知已发送到您的设备" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "确保您的账户已解锁,并且指纹短语与其他设备上的相匹配。" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "请求获得批准后,您将收到通知" + }, + "needAnotherOptionV1": { + "message": "需要其他选项吗?" + }, "loginInitiated": { "message": "登录已发起" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "在新窗口中打开" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "需要设备批准。请在下面选择一个批准选项:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "记住此设备" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "缺少用户电子邮件" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "设备已信任" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "正在访问" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "通行密钥不会被复制" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "筛选" }, + "filterVault": { + "message": "密码库筛选" + }, + "filterApplied": { + "message": "已应用一个筛选" + }, + "filterAppliedPlural": { + "message": "已应用 $COUNT$ 个筛选", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "个人详细信息" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "生成了密码" + }, + "compactMode": { + "message": "紧凑模式" + }, + "beta": { + "message": "Beta 版" } } diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 8a4ff40e9c5..db169e503b6 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -1851,6 +1851,9 @@ "secureNotes": { "message": "安全筆記" }, + "sshKeys": { + "message": "SSH Keys" + }, "clear": { "message": "清除", "description": "To clear something out. example: To clear browser history." @@ -2889,8 +2892,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2903,6 +2906,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "使用者名稱類型" }, @@ -3150,12 +3173,27 @@ "resendNotification": { "message": "重新傳送通知" }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "檢視所有登入選項" }, "notificationSentDevice": { "message": "已傳送通知至您的裝置。" }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginInitiated": { "message": "登入已啟動" }, @@ -3249,9 +3287,18 @@ "opensInANewWindow": { "message": "在新視窗開啟" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "裝置需要取得核准。請在下面選擇一個核准選項:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "記住這個裝置" }, @@ -3325,6 +3372,9 @@ "userEmailMissing": { "message": "缺少使用者電子郵件地址" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "裝置已信任" }, @@ -3761,6 +3811,9 @@ "accessing": { "message": "Accessing" }, + "loggedInExclamation": { + "message": "Logged in!" + }, "passkeyNotCopied": { "message": "密碼金鑰不會被複製" }, @@ -4252,6 +4305,21 @@ "filters": { "message": "Filters" }, + "filterVault": { + "message": "Filter vault" + }, + "filterApplied": { + "message": "One filter applied" + }, + "filterAppliedPlural": { + "message": "$COUNT$ filters applied", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, "personalDetails": { "message": "Personal details" }, @@ -4823,5 +4891,11 @@ }, "generatedPassword": { "message": "Generated password" + }, + "compactMode": { + "message": "Compact mode" + }, + "beta": { + "message": "Beta" } } diff --git a/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.spec.ts b/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.spec.ts new file mode 100644 index 00000000000..8f3199cdfce --- /dev/null +++ b/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.spec.ts @@ -0,0 +1,64 @@ +import { Router } from "@angular/router"; +import { MockProxy, mock } from "jest-mock-extended"; +import { BehaviorSubject } from "rxjs"; + +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; + +import { postLogoutMessageListener$ } from "../utils/post-logout-message-listener"; + +import { ExtensionLoginDecryptionOptionsService } from "./extension-login-decryption-options.service"; + +// Mock the module providing postLogoutMessageListener$ +jest.mock("../utils/post-logout-message-listener", () => { + return { + postLogoutMessageListener$: new BehaviorSubject(""), // Replace with mock subject + }; +}); + +describe("ExtensionLoginDecryptionOptionsService", () => { + let service: ExtensionLoginDecryptionOptionsService; + + let messagingService: MockProxy; + let router: MockProxy; + let postLogoutMessageSubject: BehaviorSubject; + + beforeEach(() => { + messagingService = mock(); + router = mock(); + + // Cast postLogoutMessageListener$ to BehaviorSubject for dynamic control + postLogoutMessageSubject = postLogoutMessageListener$ as BehaviorSubject; + + service = new ExtensionLoginDecryptionOptionsService(messagingService, router); + }); + + it("should instantiate the service", () => { + expect(service).not.toBeFalsy(); + }); + + describe("logOut()", () => { + it("should send a logout message", async () => { + postLogoutMessageSubject.next("switchAccountFinish"); + + await service.logOut(); + + expect(messagingService.send).toHaveBeenCalledWith("logout"); + }); + + it("should navigate to root on 'switchAccountFinish'", async () => { + postLogoutMessageSubject.next("switchAccountFinish"); + + await service.logOut(); + + expect(router.navigate).toHaveBeenCalledWith(["/"]); + }); + + it("should not navigate for 'doneLoggingOut'", async () => { + postLogoutMessageSubject.next("doneLoggingOut"); + + await service.logOut(); + + expect(router.navigate).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.ts b/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.ts new file mode 100644 index 00000000000..ea529e277e6 --- /dev/null +++ b/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.ts @@ -0,0 +1,37 @@ +import { Router } from "@angular/router"; +import { firstValueFrom } from "rxjs"; + +import { + DefaultLoginDecryptionOptionsService, + LoginDecryptionOptionsService, +} from "@bitwarden/auth/angular"; +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; + +import { postLogoutMessageListener$ } from "../utils/post-logout-message-listener"; + +export class ExtensionLoginDecryptionOptionsService + extends DefaultLoginDecryptionOptionsService + implements LoginDecryptionOptionsService +{ + constructor( + protected messagingService: MessagingService, + private router: Router, + ) { + super(messagingService); + } + + override async logOut(): Promise { + // start listening for "switchAccountFinish" or "doneLoggingOut" + const messagePromise = firstValueFrom(postLogoutMessageListener$); + + super.logOut(); + + // wait for messages + const command = await messagePromise; + + // doneLoggingOut already has a message handler that will navigate us + if (command === "switchAccountFinish") { + await this.router.navigate(["/"]); + } + } +} diff --git a/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.html b/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options-v1.component.html similarity index 100% rename from apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.html rename to apps/browser/src/auth/popup/login-decryption-options/login-decryption-options-v1.component.html diff --git a/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.ts b/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options-v1.component.ts similarity index 80% rename from apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.ts rename to apps/browser/src/auth/popup/login-decryption-options/login-decryption-options-v1.component.ts index 6231b027749..bd8f808c910 100644 --- a/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.ts +++ b/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options-v1.component.ts @@ -1,15 +1,15 @@ import { Component } from "@angular/core"; import { firstValueFrom } from "rxjs"; -import { BaseLoginDecryptionOptionsComponent } from "@bitwarden/angular/auth/components/base-login-decryption-options.component"; +import { BaseLoginDecryptionOptionsComponentV1 } from "@bitwarden/angular/auth/components/base-login-decryption-options-v1.component"; import { postLogoutMessageListener$ } from "../utils/post-logout-message-listener"; @Component({ selector: "browser-login-decryption-options", - templateUrl: "login-decryption-options.component.html", + templateUrl: "login-decryption-options-v1.component.html", }) -export class LoginDecryptionOptionsComponent extends BaseLoginDecryptionOptionsComponent { +export class LoginDecryptionOptionsComponentV1 extends BaseLoginDecryptionOptionsComponentV1 { override async createUser(): Promise { try { await super.createUser(); diff --git a/apps/browser/src/auth/popup/settings/account-security.component.ts b/apps/browser/src/auth/popup/settings/account-security.component.ts index 68b46ad8810..8493358aa8b 100644 --- a/apps/browser/src/auth/popup/settings/account-security.component.ts +++ b/apps/browser/src/auth/popup/settings/account-security.component.ts @@ -442,6 +442,9 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { await this.biometricStateService.setBiometricUnlockEnabled(false); await this.biometricStateService.setFingerprintValidated(false); } + } else { + await this.biometricStateService.setBiometricUnlockEnabled(false); + await this.biometricStateService.setFingerprintValidated(false); } } diff --git a/apps/browser/src/autofill/popup/settings/autofill.component.html b/apps/browser/src/autofill/popup/settings/autofill.component.html index e9c9fd9c75e..18c6f515337 100644 --- a/apps/browser/src/autofill/popup/settings/autofill.component.html +++ b/apps/browser/src/autofill/popup/settings/autofill.component.html @@ -160,7 +160,10 @@

{{ "enableAutoFillOnPageLoadSectionTitle" | i18n }}

{{ "enableAutoFillOnPageLoadDesc" | i18n }} - + {{ "warningCapitalized" | i18n }}: {{ "experimentalFeature" | i18n }} { }); describe("collectPageDetailsFromTab$", () => { - const tab = mock({ id: 1 }); + const tab = mock({ id: 1, url: "https://www.example.com" }); const messages = new Subject(); function mockCollectPageDetailsResponseMessage( @@ -165,11 +165,16 @@ describe("AutofillService", () => { it("sends a `collectPageDetails` message to the passed tab", () => { autofillService.collectPageDetailsFromTab$(tab); - expect(BrowserApi.tabSendMessage).toHaveBeenCalledWith(tab, { - command: AutofillMessageCommand.collectPageDetails, - sender: AutofillMessageSender.collectPageDetailsFromTabObservable, + expect(BrowserApi.tabSendMessage).toHaveBeenCalledWith( tab, - }); + { + command: AutofillMessageCommand.collectPageDetails, + sender: AutofillMessageSender.collectPageDetailsFromTabObservable, + tab, + }, + null, + true, + ); }); it("builds an array of page details from received `collectPageDetailsResponse` messages", async () => { @@ -218,6 +223,41 @@ describe("AutofillService", () => { expect(tracker.emissions[1]).toBeUndefined(); }); + + it("returns an empty array when the tab.url is empty", async () => { + const tracker = subscribeTo(autofillService.collectPageDetailsFromTab$({ ...tab, url: "" })); + + await tracker.pauseUntilReceived(1); + + expect(tracker.emissions[0]).toEqual([]); + }); + + it("returns an empty array when the `BrowserApi.tabSendMessage` throws an error", async () => { + (BrowserApi.tabSendMessage as jest.Mock).mockRejectedValueOnce(undefined); + + const tracker = subscribeTo(autofillService.collectPageDetailsFromTab$(tab)); + + await tracker.pauseUntilReceived(1); + + expect(tracker.emissions[0]).toEqual([]); + }); + + ["moz-extension://", "chrome-extension://", "safari-web-extension://"].forEach( + (extensionPrefix) => { + it(`returns an empty array when the tab.url starts with ${extensionPrefix}`, async () => { + const tracker = subscribeTo( + autofillService.collectPageDetailsFromTab$({ + ...tab, + url: `${extensionPrefix}/3e42342/popup/index.html`, + }), + ); + + await tracker.pauseUntilReceived(1); + + expect(tracker.emissions[0]).toEqual([]); + }); + }, + ); }); describe("loadAutofillScriptsOnInstall", () => { diff --git a/apps/browser/src/autofill/services/autofill.service.ts b/apps/browser/src/autofill/services/autofill.service.ts index 24054794b62..eaaf23ca84f 100644 --- a/apps/browser/src/autofill/services/autofill.service.ts +++ b/apps/browser/src/autofill/services/autofill.service.ts @@ -1,4 +1,4 @@ -import { filter, firstValueFrom, Observable, scan, startWith } from "rxjs"; +import { filter, firstValueFrom, merge, Observable, ReplaySubject, scan, startWith } from "rxjs"; import { pairwise } from "rxjs/operators"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; @@ -91,6 +91,9 @@ export default class AutofillService implements AutofillServiceInterface { * @param tab The tab to collect page details from */ collectPageDetailsFromTab$(tab: chrome.tabs.Tab): Observable { + /** Replay Subject that can be utilized when `messages$` may not emit the page details. */ + const pageDetailsFallback$ = new ReplaySubject<[]>(1); + const pageDetailsFromTab$ = this.messageListener .messages$(COLLECT_PAGE_DETAILS_RESPONSE_COMMAND) .pipe( @@ -112,13 +115,35 @@ export default class AutofillService implements AutofillServiceInterface { ), ); - void BrowserApi.tabSendMessage(tab, { - tab: tab, - command: AutofillMessageCommand.collectPageDetails, - sender: AutofillMessageSender.collectPageDetailsFromTabObservable, + void BrowserApi.tabSendMessage( + tab, + { + tab: tab, + command: AutofillMessageCommand.collectPageDetails, + sender: AutofillMessageSender.collectPageDetailsFromTabObservable, + }, + null, + true, + ).catch(() => { + // When `tabSendMessage` throws an error the `pageDetailsFromTab$` will not emit, + // fallback to an empty array + pageDetailsFallback$.next([]); }); - return pageDetailsFromTab$; + // Fallback to empty array when: + // - In Safari, `tabSendMessage` doesn't throw an error for this case. + // - When opening the extension directly via the URL, `tabSendMessage` doesn't always respond nor throw an error in FireFox. + // Adding checks for the major 3 browsers here to be safe. + const urlHasBrowserProtocol = [ + "moz-extension://", + "chrome-extension://", + "safari-web-extension://", + ].some((protocol) => tab.url.startsWith(protocol)); + if (!tab.url || urlHasBrowserProtocol) { + pageDetailsFallback$.next([]); + } + + return merge(pageDetailsFromTab$, pageDetailsFallback$); } /** diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 764304f4ff9..b66f2457b26 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -725,7 +725,7 @@ export default class MainBackground { ); const sdkClientFactory = flagEnabled("sdk") - ? new BrowserSdkClientFactory() + ? new BrowserSdkClientFactory(this.logService) : new NoopSdkClientFactory(); this.sdkService = new DefaultSdkService( sdkClientFactory, diff --git a/apps/browser/src/manifest.json b/apps/browser/src/manifest.json index 9c2d2d610bc..e81409e6e2f 100644 --- a/apps/browser/src/manifest.json +++ b/apps/browser/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2024.11.1", + "version": "2024.11.2", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", @@ -171,6 +171,8 @@ "open_at_install": false, "browser_style": false }, - "storage": { "managed_schema": "managed_schema.json" }, + "storage": { + "managed_schema": "managed_schema.json" + }, "__firefox__storage": null } diff --git a/apps/browser/src/manifest.v3.json b/apps/browser/src/manifest.v3.json index fb44505ae8d..1ece5626227 100644 --- a/apps/browser/src/manifest.v3.json +++ b/apps/browser/src/manifest.v3.json @@ -3,7 +3,7 @@ "minimum_chrome_version": "102.0", "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2024.11.1", + "version": "2024.11.2", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", diff --git a/apps/browser/src/platform/browser/browser-api.ts b/apps/browser/src/platform/browser/browser-api.ts index 072ef74004f..850e14302d4 100644 --- a/apps/browser/src/platform/browser/browser-api.ts +++ b/apps/browser/src/platform/browser/browser-api.ts @@ -200,15 +200,17 @@ export class BrowserApi { tab: chrome.tabs.Tab, obj: T, options: chrome.tabs.MessageSendOptions = null, + rejectOnError = false, ): Promise { if (!tab || !tab.id) { return; } - return new Promise((resolve) => { + return new Promise((resolve, reject) => { chrome.tabs.sendMessage(tab.id, obj, options, (response) => { - if (chrome.runtime.lastError) { + if (chrome.runtime.lastError && rejectOnError) { // Some error happened + reject(); } resolve(response); }); diff --git a/apps/browser/src/platform/popup/browser-popup-utils.ts b/apps/browser/src/platform/popup/browser-popup-utils.ts index fb53d3451f2..5459c0e220d 100644 --- a/apps/browser/src/platform/popup/browser-popup-utils.ts +++ b/apps/browser/src/platform/popup/browser-popup-utils.ts @@ -1,6 +1,7 @@ import { BrowserApi } from "../browser/browser-api"; import { ScrollOptions } from "./abstractions/browser-popup-utils.abstractions"; +import { PopupWidthOptions } from "./layout/popup-width.service"; class BrowserPopupUtils { /** @@ -108,7 +109,10 @@ class BrowserPopupUtils { const defaultPopoutWindowOptions: chrome.windows.CreateData = { type: "popup", focused: true, - width: 380, + width: Math.max( + PopupWidthOptions.default, + typeof document === "undefined" ? PopupWidthOptions.default : document.body.clientWidth, + ), height: 630, }; const offsetRight = 15; diff --git a/apps/browser/src/platform/popup/layout/popup-layout.stories.ts b/apps/browser/src/platform/popup/layout/popup-layout.stories.ts index 5b9417a6a19..1aaea85e4a1 100644 --- a/apps/browser/src/platform/popup/layout/popup-layout.stories.ts +++ b/apps/browser/src/platform/popup/layout/popup-layout.stories.ts @@ -313,6 +313,10 @@ export default { back: "Back", loading: "Loading", search: "Search", + vault: "Vault", + generator: "Generator", + send: "Send", + settings: "Settings", }); }, }, @@ -510,3 +514,25 @@ export const TransparentHeader: Story = { `, }), }; + +export const WidthOptions: Story = { + render: (args) => ({ + props: args, + template: /* HTML */ ` +
+
Default:
+
+ +
+
Wide:
+
+ +
+
Extra wide:
+
+ +
+
+ `, + }), +}; diff --git a/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html b/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html index e53e8905e69..a4ae3161b47 100644 --- a/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html +++ b/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html @@ -9,7 +9,7 @@ diff --git a/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.ts b/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.ts index ced3f6462e9..e01b4efd71b 100644 --- a/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.ts +++ b/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.ts @@ -2,13 +2,14 @@ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { RouterModule } from "@angular/router"; +import { JslibModule } from "@bitwarden/angular/jslib.module"; import { LinkModule } from "@bitwarden/components"; @Component({ selector: "popup-tab-navigation", templateUrl: "popup-tab-navigation.component.html", standalone: true, - imports: [CommonModule, LinkModule, RouterModule], + imports: [CommonModule, LinkModule, RouterModule, JslibModule], host: { class: "tw-block tw-h-full tw-w-full tw-flex tw-flex-col", }, @@ -16,25 +17,25 @@ import { LinkModule } from "@bitwarden/components"; export class PopupTabNavigationComponent { navButtons = [ { - label: "Vault", + label: "vault", page: "/tabs/vault", iconKey: "lock", iconKeyActive: "lock-f", }, { - label: "Generator", + label: "generator", page: "/tabs/generator", iconKey: "generate", iconKeyActive: "generate-f", }, { - label: "Send", + label: "send", page: "/tabs/send", iconKey: "send", iconKeyActive: "send-f", }, { - label: "Settings", + label: "settings", page: "/tabs/settings", iconKey: "cog", iconKeyActive: "cog-f", diff --git a/apps/browser/src/platform/popup/layout/popup-width.service.ts b/apps/browser/src/platform/popup/layout/popup-width.service.ts new file mode 100644 index 00000000000..d8706dbcbcf --- /dev/null +++ b/apps/browser/src/platform/popup/layout/popup-width.service.ts @@ -0,0 +1,63 @@ +import { inject, Injectable } from "@angular/core"; +import { map, Observable } from "rxjs"; + +import { + GlobalStateProvider, + KeyDefinition, + POPUP_STYLE_DISK, +} from "@bitwarden/common/platform/state"; + +/** + * + * Value represents width in pixels + */ +export const PopupWidthOptions = Object.freeze({ + default: 380, + wide: 480, + "extra-wide": 600, +}); + +type PopupWidthOptions = typeof PopupWidthOptions; +export type PopupWidthOption = keyof PopupWidthOptions; + +const POPUP_WIDTH_KEY_DEF = new KeyDefinition(POPUP_STYLE_DISK, "popup-width", { + deserializer: (s) => s, +}); + +/** + * Updates the extension popup width based on a user setting + **/ +@Injectable({ providedIn: "root" }) +export class PopupWidthService { + private static readonly LocalStorageKey = "bw-popup-width"; + private readonly state = inject(GlobalStateProvider).get(POPUP_WIDTH_KEY_DEF); + + readonly width$: Observable = this.state.state$.pipe( + map((state) => state ?? "default"), + ); + + async setWidth(width: PopupWidthOption) { + await this.state.update(() => width); + } + + /** Begin listening for state changes */ + init() { + this.width$.subscribe((width: PopupWidthOption) => { + PopupWidthService.setStyle(width); + localStorage.setItem(PopupWidthService.LocalStorageKey, width); + }); + } + + private static setStyle(width: PopupWidthOption) { + const pxWidth = PopupWidthOptions[width] ?? PopupWidthOptions.default; + document.body.style.minWidth = `${pxWidth}px`; + } + + /** + * To keep the popup size from flickering on bootstrap, we store the width in `localStorage` so we can quickly & synchronously reference it. + **/ + static initBodyWidthFromLocalStorage() { + const storedValue = localStorage.getItem(PopupWidthService.LocalStorageKey); + this.setStyle(storedValue as any); + } +} diff --git a/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts b/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts index f9cfde73aff..6ebbe3ff6b4 100644 --- a/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts +++ b/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts @@ -1,4 +1,6 @@ +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory"; +import { RecoverableSDKError } from "@bitwarden/common/platform/services/sdk/default-sdk.service"; import type { BitwardenClient } from "@bitwarden/sdk-internal"; import { BrowserApi } from "../../browser/browser-api"; @@ -62,24 +64,39 @@ async function load() { * Works both in popup and service worker. */ export class BrowserSdkClientFactory implements SdkClientFactory { + constructor(private logService: LogService) {} + async createSdkClient( ...args: ConstructorParameters ): Promise { + const startTime = performance.now(); try { await loadWithTimeout(); } catch (error) { throw new Error(`Failed to load: ${error.message}`); } - return Promise.resolve((globalThis as any).init_sdk(...args)); + const endTime = performance.now(); + const elapsed = Math.round((endTime - startTime) / 1000); + + const instance = (globalThis as any).init_sdk(...args); + + this.logService.info("WASM SDK loaded in", Math.round(endTime - startTime), "ms"); + + // If it takes 3 seconds or more to load, we want to capture it. + if (elapsed >= 3) { + throw new RecoverableSDKError(instance, elapsed); + } + + return instance; } } const loadWithTimeout = async () => { return new Promise((resolve, reject) => { const timer = setTimeout(() => { - reject(new Error("Operation timed out after 1 second")); - }, 1000); + reject(new Error("Operation timed out after 10 second")); + }, 10000); load() .then(() => { diff --git a/apps/browser/src/popup/app-routing.animations.ts b/apps/browser/src/popup/app-routing.animations.ts index 061067c717e..6af47934ef9 100644 --- a/apps/browser/src/popup/app-routing.animations.ts +++ b/apps/browser/src/popup/app-routing.animations.ts @@ -1,4 +1,19 @@ -import { animate, group, query, style, transition, trigger } from "@angular/animations"; +import { + animate, + AnimationMetadata, + group, + query, + style, + transition, + trigger, +} from "@angular/animations"; + +/** + * Determines the router transition behavior. + * Changing between elevations will animate from the right. + * Navigating between two pages of the same elevation will not animate. + */ +export type RouteElevation = 0 | 1 | 2 | 3 | 4; const queryShown = query( ":enter, :leave", @@ -13,11 +28,15 @@ const queryChildRoute = query("router-outlet ~ *", [style({}), animate(1, style( optional: true, }); -const speed = "0.4s"; +const speedX = "0.225s"; +const speedY = "0.3s"; -export function queryTranslate( - direction: string, - axis: string, +type TranslateDirection = "enter" | "leave"; +type TranslationAxis = "X" | "Y"; + +function queryTranslate( + direction: TranslateDirection, + axis: TranslationAxis, from: number, to: number, zIndex = 1000, @@ -30,217 +49,67 @@ export function queryTranslate( zIndex: zIndex, boxShadow: "0 3px 2px -2px gray", }), - animate(speed + " ease-in-out", style({ transform: "translate" + axis + "(" + to + "%)" })), + animate( + (axis === "X" ? speedX : speedY) + " ease-in-out", + style({ + transform: "translate" + axis + "(" + to + "%)", + }), + ), ], - { optional: true }, - ); -} - -export function queryTranslateX(direction: string, from: number, to: number, zIndex = 1000) { - return queryTranslate(direction, "X", from, to, zIndex); -} - -export function queryTranslateY(direction: string, from: number, to: number, zIndex = 1000) { - return queryTranslate(direction, "Y", from, to, zIndex); -} - -const inSlideLeft = [ - queryShown, - group([queryTranslateX("enter", 100, 0), queryTranslateX("leave", 0, -100), queryChildRoute]), -]; - -const outSlideRight = [ - queryShown, - group([queryTranslateX("enter", -100, 0), queryTranslateX("leave", 0, 100)]), -]; - -const inSlideUp = [ - queryShown, - group([queryTranslateY("enter", 100, 0, 1010), queryTranslateY("leave", 0, 0), queryChildRoute]), -]; - -const outSlideDown = [ - queryShown, - group([queryTranslateY("enter", 0, 0), queryTranslateY("leave", 0, 100, 1010)]), -]; - -const inSlideDown = [ - queryShown, - group([queryTranslateY("enter", -100, 0, 1010), queryTranslateY("leave", 0, 0), queryChildRoute]), -]; - -// eslint-disable-next-line -const outSlideUp = [ - queryShown, - group([queryTranslateY("enter", 0, 0), queryTranslateY("leave", 0, -100, 1010)]), -]; - -export function tabsToCiphers(fromState: string, toState: string) { - if (fromState == null || toState === null || toState.indexOf("ciphers_") === -1) { - return false; - } - return ( - (fromState.indexOf("ciphers_") === 0 && fromState.indexOf("ciphers_direction=b") === -1) || - fromState === "tabs" - ); -} - -export function ciphersToTabs(fromState: string, toState: string) { - if (fromState == null || toState === null || fromState.indexOf("ciphers_") === -1) { - return false; - } - return toState.indexOf("ciphers_direction=b") === 0 || toState === "tabs"; -} - -export function ciphersToView(fromState: string, toState: string) { - if (fromState == null || toState === null) { - return false; - } - return ( - fromState.indexOf("ciphers_") === 0 && - (toState === "view-cipher" || toState === "add-cipher" || toState === "clone-cipher") + { + optional: true, + }, ); } -export function viewToCiphers(fromState: string, toState: string) { - if (fromState == null || toState === null) { - return false; - } - return ( - (fromState === "view-cipher" || fromState === "add-cipher" || fromState === "clone-cipher") && - toState.indexOf("ciphers_") === 0 - ); -} +const animations = { + slideInFromRight: [ + queryShown, + group([ + queryTranslate("enter", "X", 100, 0, 1010), + queryTranslate("leave", "X", 0, 0), + queryChildRoute, + ]), + ], + slideOutToRight: [ + queryShown, + group([queryTranslate("enter", "X", 0, 0), queryTranslate("leave", "X", 0, 100, 1010)]), + ], + /** --- Not used --- */ + // slideInFromTop: [ + // queryShown, + // group([ + // queryTranslate("enter", "Y", -100, 0, 1010), + // queryTranslate("leave", "Y", 0, 0), + // queryChildRoute, + // ]), + // ], + // slideOutToTop: [ + // queryShown, + // group([queryTranslate("enter", "Y", 0, 0), queryTranslate("leave", "Y", 0, -100, 1010)]), + // ], +} satisfies Record; export const routerTransition = trigger("routerTransition", [ - transition("void => home", inSlideLeft), - transition("void => tabs", inSlideLeft), - - transition("home => environment, home => login, home => register", inSlideUp), - - transition("login => home", outSlideDown), - transition("login => hint", inSlideUp), - transition("login => tabs, login => 2fa, login => login-with-device", inSlideLeft), - - transition("hint => login, register => home, environment => home", outSlideDown), - - transition("2fa => login", outSlideRight), - transition("2fa => 2fa-options", inSlideUp), - transition("2fa-options => 2fa", outSlideDown), - transition("2fa => tabs", inSlideLeft), - - transition("login-with-device => tabs, login-with-device => 2fa", inSlideLeft), - transition("login-with-device => login", outSlideRight), - - transition("admin-approval-requested => tabs, admin-approval-requested => 2fa", inSlideLeft), - transition("admin-approval-requested => login", outSlideRight), - - transition(tabsToCiphers, inSlideLeft), - transition(ciphersToTabs, outSlideRight), - - transition(ciphersToView, inSlideUp), - transition(viewToCiphers, outSlideDown), - - transition("tabs => view-cipher", inSlideUp), - transition("view-cipher => tabs", outSlideDown), - - transition("view-cipher => edit-cipher, view-cipher => cipher-password-history", inSlideUp), - transition( - "edit-cipher => view-cipher, cipher-password-history => view-cipher, edit-cipher => tabs", - outSlideDown, - ), - - transition("view-cipher => clone-cipher", inSlideUp), - transition("clone-cipher => view-cipher, clone-cipher => tabs", outSlideDown), - - transition("view-cipher => share-cipher", inSlideUp), - transition("share-cipher => view-cipher", outSlideDown), - - transition("tabs => add-cipher", inSlideUp), - transition("add-cipher => tabs", outSlideDown), - - transition("generator => generator-history, tabs => generator-history", inSlideLeft), - transition("generator-history => generator, generator-history => tabs", outSlideRight), - - transition( - "add-cipher => generator, edit-cipher => generator, clone-cipher => generator", - inSlideUp, - ), - transition( - "generator => add-cipher, generator => edit-cipher, generator => clone-cipher", - outSlideDown, - ), - - transition("edit-cipher => attachments, edit-cipher => collections", inSlideLeft), - transition("attachments => edit-cipher, collections => edit-cipher", outSlideRight), - - transition("clone-cipher => attachments, clone-cipher => collections", inSlideLeft), - transition("attachments => clone-cipher, collections => clone-cipher", outSlideRight), - - transition("tabs => account-security", inSlideLeft), - transition("account-security => tabs", outSlideRight), - - transition("tabs => assign-collections", inSlideLeft), - transition("assign-collections => tabs", outSlideRight), - - // Vault settings - transition("tabs => vault-settings", inSlideLeft), - transition("vault-settings => tabs", outSlideRight), - - transition("vault-settings => import", inSlideLeft), - transition("import => vault-settings", outSlideRight), - - transition("vault-settings => export", inSlideLeft), - transition("export => vault-settings", outSlideRight), - - transition("vault-settings => folders", inSlideLeft), - transition("folders => vault-settings", outSlideRight), - - transition("folders => edit-folder, folders => add-folder", inSlideUp), - transition("edit-folder => folders, add-folder => folders", outSlideDown), - - transition("vault-settings => sync", inSlideLeft), - transition("sync => vault-settings", outSlideRight), - - transition("vault-settings => trash", inSlideLeft), - transition("trash => vault-settings", outSlideRight), - - transition("trash => view-cipher", inSlideLeft), - transition("view-cipher => trash", outSlideRight), - - // Appearance settings - transition("tabs => appearance", inSlideLeft), - transition("appearance => tabs", outSlideRight), - - transition("tabs => premium", inSlideLeft), - transition("premium => tabs", outSlideRight), - - transition("tabs => lock", inSlideDown), - - transition("tabs => about", inSlideLeft), - transition("about => tabs", outSlideRight), - - transition("tabs => send-type", inSlideLeft), - transition("send-type => tabs", outSlideRight), - - transition("tabs => add-send, send-type => add-send", inSlideUp), - transition("add-send => tabs, add-send => send-type", outSlideDown), - - transition("tabs => edit-send, send-type => edit-send", inSlideUp), - transition("edit-send => tabs, edit-send => send-type", outSlideDown), - - // Notification settings - transition("tabs => notifications", inSlideLeft), - transition("notifications => tabs", outSlideRight), - - transition("notifications => excluded-domains", inSlideLeft), - transition("excluded-domains => notifications", outSlideRight), - - transition("tabs => autofill", inSlideLeft), - transition("autofill => tabs", outSlideRight), - - transition("* => account-switcher", inSlideUp), - transition("account-switcher => *", outSlideDown), - - transition("lock => *", outSlideDown), + transition("0 => 1", animations.slideInFromRight), + transition("0 => 2", animations.slideInFromRight), + transition("0 => 3", animations.slideInFromRight), + transition("0 => 4", animations.slideInFromRight), + transition("1 => 2", animations.slideInFromRight), + transition("1 => 3", animations.slideInFromRight), + transition("1 => 4", animations.slideInFromRight), + transition("2 => 3", animations.slideInFromRight), + transition("2 => 4", animations.slideInFromRight), + transition("3 => 4", animations.slideInFromRight), + + transition("1 => 0", animations.slideOutToRight), + transition("2 => 0", animations.slideOutToRight), + transition("2 => 1", animations.slideOutToRight), + transition("3 => 0", animations.slideOutToRight), + transition("3 => 1", animations.slideOutToRight), + transition("3 => 2", animations.slideOutToRight), + transition("4 => 0", animations.slideOutToRight), + transition("4 => 1", animations.slideOutToRight), + transition("4 => 2", animations.slideOutToRight), + transition("4 => 3", animations.slideOutToRight), ]); diff --git a/apps/browser/src/popup/app-routing.module.ts b/apps/browser/src/popup/app-routing.module.ts index ba8ab1e7aaf..77a720557c6 100644 --- a/apps/browser/src/popup/app-routing.module.ts +++ b/apps/browser/src/popup/app-routing.module.ts @@ -21,7 +21,6 @@ import { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh import { AnonLayoutWrapperComponent, AnonLayoutWrapperData, - DevicesIcon, LoginComponent, LoginSecondaryContentComponent, LockIcon, @@ -37,6 +36,8 @@ import { SetPasswordJitComponent, UserLockIcon, VaultIcon, + LoginDecryptionOptionsComponent, + DevicesIcon, } from "@bitwarden/auth/angular"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; @@ -51,7 +52,7 @@ import { import { HintComponent } from "../auth/popup/hint.component"; import { HomeComponent } from "../auth/popup/home.component"; import { LockComponent } from "../auth/popup/lock.component"; -import { LoginDecryptionOptionsComponent } from "../auth/popup/login-decryption-options/login-decryption-options.component"; +import { LoginDecryptionOptionsComponentV1 } from "../auth/popup/login-decryption-options/login-decryption-options-v1.component"; import { LoginComponentV1 } from "../auth/popup/login-v1.component"; import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component"; import { RegisterComponent } from "../auth/popup/register.component"; @@ -122,6 +123,7 @@ import { TrashComponent } from "../vault/popup/settings/trash.component"; import { VaultSettingsV2Component } from "../vault/popup/settings/vault-settings-v2.component"; import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.component"; +import { RouteElevation } from "./app-routing.animations"; import { debounceNavigationGuard } from "./services/debounce-navigation.service"; import { TabsV2Component } from "./tabs-v2.component"; import { TabsComponent } from "./tabs.component"; @@ -130,13 +132,10 @@ import { TabsComponent } from "./tabs.component"; * Data properties acceptable for use in extension route objects */ export interface RouteDataProperties { + elevation: RouteElevation; + /** - * A state string which identifies the current route for the sake of transition animation logic. - * The state string is passed into [@routerTransition] in the app.component. - */ - state: string; - /** - * A boolean to indicate that the URL should not be saved in memory in the BrowserRouterSvc. + * A boolean to indicate that the URL should not be saved in memory in the BrowserRouterService. */ doNotSaveUrl?: boolean; } @@ -166,19 +165,19 @@ const routes: Routes = [ path: "home", component: HomeComponent, canActivate: [unauthGuardFn(unauthRouteOverrides), unauthUiRefreshRedirect("/login")], - data: { state: "home" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, ...extensionRefreshSwap(Fido2V1Component, Fido2Component, { path: "fido2", canActivate: [fido2AuthGuard], - data: { state: "fido2" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), { path: "lock", component: LockComponent, canActivate: [lockGuard()], canMatch: [extensionRefreshRedirect("/lockV2")], - data: { state: "lock", doNotSaveUrl: true } satisfies RouteDataProperties, + data: { elevation: 1, doNotSaveUrl: true } satisfies RouteDataProperties, }, ...twofactorRefactorSwap( TwoFactorComponent, @@ -186,12 +185,12 @@ const routes: Routes = [ { path: "2fa", canActivate: [unauthGuardFn(unauthRouteOverrides)], - data: { state: "2fa" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "2fa", canActivate: [unauthGuardFn(unauthRouteOverrides)], - data: { state: "2fa" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, children: [ { path: "", @@ -204,207 +203,207 @@ const routes: Routes = [ path: "2fa-options", component: TwoFactorOptionsComponent, canActivate: [unauthGuardFn(unauthRouteOverrides)], - data: { state: "2fa-options" } satisfies RouteDataProperties, - }, - { - path: "login-initiated", - component: LoginDecryptionOptionsComponent, - canActivate: [tdeDecryptionRequiredGuard()], - data: { state: "login-initiated" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "sso", component: SsoComponent, canActivate: [unauthGuardFn(unauthRouteOverrides)], - data: { state: "sso" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "set-password", component: SetPasswordComponent, - data: { state: "set-password" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "remove-password", component: RemovePasswordComponent, canActivate: [authGuard], - data: { state: "remove-password" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "register", component: RegisterComponent, canActivate: [unauthGuardFn(unauthRouteOverrides)], - data: { state: "register" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "environment", component: EnvironmentComponent, canActivate: [unauthGuardFn(unauthRouteOverrides)], - data: { state: "environment" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "ciphers", component: VaultItemsComponent, canActivate: [authGuard], - data: { state: "ciphers" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, ...extensionRefreshSwap(ViewComponent, ViewV2Component, { path: "view-cipher", canActivate: [authGuard], - data: { state: "view-cipher" } satisfies RouteDataProperties, + data: { + // Above "trash" + elevation: 3, + } satisfies RouteDataProperties, }), ...extensionRefreshSwap(PasswordHistoryComponent, PasswordHistoryV2Component, { path: "cipher-password-history", canActivate: [authGuard], - data: { state: "cipher-password-history" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(AddEditComponent, AddEditV2Component, { path: "add-cipher", canActivate: [authGuard, debounceNavigationGuard()], - data: { state: "add-cipher" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, runGuardsAndResolvers: "always", }), ...extensionRefreshSwap(AddEditComponent, AddEditV2Component, { path: "edit-cipher", canActivate: [authGuard, debounceNavigationGuard()], - data: { state: "edit-cipher" } satisfies RouteDataProperties, + data: { + // Above "trash" + elevation: 3, + } satisfies RouteDataProperties, runGuardsAndResolvers: "always", }), { path: "share-cipher", component: ShareComponent, canActivate: [authGuard], - data: { state: "share-cipher" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "collections", component: CollectionsComponent, canActivate: [authGuard], - data: { state: "collections" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, ...extensionRefreshSwap(AttachmentsComponent, AttachmentsV2Component, { path: "attachments", canActivate: [authGuard], - data: { state: "attachments" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), { path: "generator", component: GeneratorComponent, canActivate: [authGuard], - data: { state: "generator" } satisfies RouteDataProperties, + data: { elevation: 0 } satisfies RouteDataProperties, }, ...extensionRefreshSwap(PasswordGeneratorHistoryComponent, CredentialGeneratorHistoryComponent, { path: "generator-history", canActivate: [authGuard], - data: { state: "generator-history" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(ImportBrowserComponent, ImportBrowserV2Component, { path: "import", canActivate: [authGuard], - data: { state: "import" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(ExportBrowserComponent, ExportBrowserV2Component, { path: "export", canActivate: [authGuard], - data: { state: "export" } satisfies RouteDataProperties, + data: { elevation: 2 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(AutofillV1Component, AutofillComponent, { path: "autofill", canActivate: [authGuard], - data: { state: "autofill" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(AccountSecurityV1Component, AccountSecurityComponent, { path: "account-security", canActivate: [authGuard], - data: { state: "account-security" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(NotificationsSettingsV1Component, NotificationsSettingsComponent, { path: "notifications", canActivate: [authGuard], - data: { state: "notifications" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(VaultSettingsComponent, VaultSettingsV2Component, { path: "vault-settings", canActivate: [authGuard], - data: { state: "vault-settings" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(FoldersComponent, FoldersV2Component, { path: "folders", canActivate: [authGuard], - data: { state: "folders" } satisfies RouteDataProperties, + data: { elevation: 2 } satisfies RouteDataProperties, }), { path: "add-folder", component: FolderAddEditComponent, canActivate: [authGuard], - data: { state: "add-folder" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "edit-folder", component: FolderAddEditComponent, canActivate: [authGuard], - data: { state: "edit-folder" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "sync", component: SyncComponent, canActivate: [authGuard], - data: { state: "sync" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, ...extensionRefreshSwap(ExcludedDomainsV1Component, ExcludedDomainsComponent, { path: "excluded-domains", canActivate: [authGuard], - data: { state: "excluded-domains" } satisfies RouteDataProperties, + data: { elevation: 2 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(PremiumComponent, PremiumV2Component, { path: "premium", component: PremiumComponent, canActivate: [authGuard], - data: { state: "premium" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(AppearanceComponent, AppearanceV2Component, { path: "appearance", canActivate: [authGuard], - data: { state: "appearance" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(AddEditComponent, AddEditV2Component, { path: "clone-cipher", canActivate: [authGuard], - data: { state: "clone-cipher" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), { path: "send-type", component: SendTypeComponent, canActivate: [authGuard], - data: { state: "send-type" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, ...extensionRefreshSwap(SendAddEditComponent, SendAddEditV2Component, { path: "add-send", canActivate: [authGuard], - data: { state: "add-send" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(SendAddEditComponent, SendAddEditV2Component, { path: "edit-send", canActivate: [authGuard], - data: { state: "edit-send" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), { path: "send-created", component: SendCreatedComponent, canActivate: [authGuard], - data: { state: "send" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "update-temp-password", component: UpdateTempPasswordComponent, canActivate: [authGuard], - data: { state: "update-temp-password" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, ...unauthUiRefreshSwap( LoginViaAuthRequestComponentV1, ExtensionAnonLayoutWrapperComponent, { path: "login-with-device", - data: { state: "login-with-device" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "login-with-device", @@ -418,7 +417,7 @@ const routes: Routes = [ }, showLogo: false, showBackButton: true, - state: "login-with-device", + elevation: 1, } satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData, children: [ { path: "", component: LoginViaAuthRequestComponent }, @@ -435,7 +434,7 @@ const routes: Routes = [ ExtensionAnonLayoutWrapperComponent, { path: "admin-approval-requested", - data: { state: "admin-approval-requested" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, { path: "admin-approval-requested", @@ -449,7 +448,7 @@ const routes: Routes = [ }, showLogo: false, showBackButton: true, - state: "admin-approval-requested", + elevation: 1, } satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData, children: [{ path: "", component: LoginViaAuthRequestComponent }], }, @@ -461,7 +460,7 @@ const routes: Routes = [ path: "hint", canActivate: [unauthGuardFn(unauthRouteOverrides)], data: { - state: "hint", + elevation: 1, } satisfies RouteDataProperties, }, { @@ -479,7 +478,7 @@ const routes: Routes = [ }, pageIcon: UserLockIcon, showBackButton: true, - state: "hint", + elevation: 1, } satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData, children: [ { path: "", component: PasswordHintComponent }, @@ -502,7 +501,7 @@ const routes: Routes = [ { path: "login", canActivate: [unauthGuardFn(unauthRouteOverrides)], - data: { state: "login" }, + data: { elevation: 1 }, }, { path: "", @@ -515,7 +514,7 @@ const routes: Routes = [ pageTitle: { key: "logInToBitwarden", }, - state: "login", + elevation: 1, showAcctSwitcher: true, } satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData, children: [ @@ -534,6 +533,23 @@ const routes: Routes = [ ], }, ), + ...unauthUiRefreshSwap( + LoginDecryptionOptionsComponentV1, + ExtensionAnonLayoutWrapperComponent, + { + path: "login-initiated", + canActivate: [tdeDecryptionRequiredGuard()], + data: { elevation: 1 } satisfies RouteDataProperties, + }, + { + path: "login-initiated", + canActivate: [tdeDecryptionRequiredGuard()], + data: { + pageIcon: DevicesIcon, + }, + children: [{ path: "", component: LoginDecryptionOptionsComponent }], + }, + ), { path: "", component: ExtensionAnonLayoutWrapperComponent, @@ -542,7 +558,7 @@ const routes: Routes = [ path: "signup", canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()], data: { - state: "signup", + elevation: 1, pageIcon: RegistrationUserAddIcon, pageTitle: { key: "createAccount", @@ -569,7 +585,7 @@ const routes: Routes = [ canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()], data: { pageIcon: RegistrationLockAltIcon, - state: "finish-signup", + elevation: 1, showBackButton: true, } satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData, children: [ @@ -614,7 +630,7 @@ const routes: Routes = [ pageSubtitle: { key: "finishJoiningThisOrganizationBySettingAMasterPassword", }, - state: "set-password-jit", + elevation: 1, } satisfies RouteDataProperties & AnonLayoutWrapperData, }, ], @@ -623,21 +639,21 @@ const routes: Routes = [ path: "assign-collections", component: AssignCollections, canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh, true, "/")], - data: { state: "assign-collections" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }, ...extensionRefreshSwap(AboutPageComponent, AboutPageV2Component, { path: "about", canActivate: [authGuard], - data: { state: "about" } satisfies RouteDataProperties, + data: { elevation: 1 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(MoreFromBitwardenPageComponent, MoreFromBitwardenPageV2Component, { path: "more-from-bitwarden", canActivate: [authGuard], - data: { state: "moreFromBitwarden" } satisfies RouteDataProperties, + data: { elevation: 2 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(TabsComponent, TabsV2Component, { path: "tabs", - data: { state: "tabs" } satisfies RouteDataProperties, + data: { elevation: 0 } satisfies RouteDataProperties, children: [ { path: "", @@ -649,42 +665,42 @@ const routes: Routes = [ component: CurrentTabComponent, canActivate: [authGuard], canMatch: [extensionRefreshRedirect("/tabs/vault")], - data: { state: "tabs_current" } satisfies RouteDataProperties, + data: { elevation: 0 } satisfies RouteDataProperties, runGuardsAndResolvers: "always", }, ...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, { path: "vault", canActivate: [authGuard], canDeactivate: [clearVaultStateGuard], - data: { state: "tabs_vault" } satisfies RouteDataProperties, + data: { elevation: 0 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(GeneratorComponent, CredentialGeneratorComponent, { path: "generator", canActivate: [authGuard], - data: { state: "tabs_generator" } satisfies RouteDataProperties, + data: { elevation: 0 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(SettingsComponent, SettingsV2Component, { path: "settings", canActivate: [authGuard], - data: { state: "tabs_settings" } satisfies RouteDataProperties, + data: { elevation: 0 } satisfies RouteDataProperties, }), ...extensionRefreshSwap(SendGroupingsComponent, SendV2Component, { path: "send", canActivate: [authGuard], - data: { state: "tabs_send" } satisfies RouteDataProperties, + data: { elevation: 0 } satisfies RouteDataProperties, }), ], }), { path: "account-switcher", component: AccountSwitcherComponent, - data: { state: "account-switcher", doNotSaveUrl: true } satisfies RouteDataProperties, + data: { elevation: 4, doNotSaveUrl: true } satisfies RouteDataProperties, }, { path: "trash", component: TrashComponent, canActivate: [authGuard], - data: { state: "trash" } satisfies RouteDataProperties, + data: { elevation: 2 } satisfies RouteDataProperties, }, ]; diff --git a/apps/browser/src/popup/app.component.ts b/apps/browser/src/popup/app.component.ts index c23da5ca7ce..15dfcabe5fa 100644 --- a/apps/browser/src/popup/app.component.ts +++ b/apps/browser/src/popup/app.component.ts @@ -25,6 +25,7 @@ import { import { flagEnabled } from "../platform/flags"; import { PopupCompactModeService } from "../platform/popup/layout/popup-compact-mode.service"; +import { PopupWidthService } from "../platform/popup/layout/popup-width.service"; import { PopupViewCacheService } from "../platform/popup/view-cache/popup-view-cache.service"; import { initPopupClosedListener } from "../platform/services/popup-view-cache-background.service"; import { BrowserSendStateService } from "../tools/popup/services/browser-send-state.service"; @@ -37,13 +38,14 @@ import { DesktopSyncVerificationDialogComponent } from "./components/desktop-syn selector: "app-root", styles: [], animations: [routerTransition], - template: `
- + template: `
+
`, }) export class AppComponent implements OnInit, OnDestroy { private viewCacheService = inject(PopupViewCacheService); private compactModeService = inject(PopupCompactModeService); + private widthService = inject(PopupWidthService); private lastActivity: Date; private activeUserId: UserId; @@ -99,6 +101,7 @@ export class AppComponent implements OnInit, OnDestroy { await this.viewCacheService.init(); this.compactModeService.init(); + this.widthService.init(); // Component states must not persist between closing and reopening the popup, otherwise they become dead objects // Clear them aggressively to make sure this doesn't occur @@ -220,23 +223,12 @@ export class AppComponent implements OnInit, OnDestroy { this.destroy$.complete(); } - getState(outlet: RouterOutlet) { + getRouteElevation(outlet: RouterOutlet) { if (!this.routerAnimations) { return; - } else if (outlet.activatedRouteData.state === "ciphers") { - const routeDirection = - (window as any).routeDirection != null ? (window as any).routeDirection : ""; - return ( - "ciphers_direction=" + - routeDirection + - "_" + - (outlet.activatedRoute.queryParams as any).value.folderId + - "_" + - (outlet.activatedRoute.queryParams as any).value.collectionId - ); - } else { - return outlet.activatedRouteData.state; } + + return outlet.activatedRouteData.elevation; } private async recordActivity() { diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts index d6e46de6ba0..d637f695e81 100644 --- a/apps/browser/src/popup/app.module.ts +++ b/apps/browser/src/popup/app.module.ts @@ -24,7 +24,7 @@ import { ExtensionAnonLayoutWrapperComponent } from "../auth/popup/extension-ano import { HintComponent } from "../auth/popup/hint.component"; import { HomeComponent } from "../auth/popup/home.component"; import { LockComponent } from "../auth/popup/lock.component"; -import { LoginDecryptionOptionsComponent } from "../auth/popup/login-decryption-options/login-decryption-options.component"; +import { LoginDecryptionOptionsComponentV1 } from "../auth/popup/login-decryption-options/login-decryption-options-v1.component"; import { LoginComponentV1 } from "../auth/popup/login-v1.component"; import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component"; import { RegisterComponent } from "../auth/popup/register.component"; @@ -161,7 +161,7 @@ import "../platform/popup/locales"; LockComponent, LoginViaAuthRequestComponentV1, LoginComponentV1, - LoginDecryptionOptionsComponent, + LoginDecryptionOptionsComponentV1, NotificationsSettingsV1Component, AppearanceComponent, GeneratorComponent, diff --git a/apps/browser/src/popup/main.ts b/apps/browser/src/popup/main.ts index c98e30e6bca..db634ea2e2c 100644 --- a/apps/browser/src/popup/main.ts +++ b/apps/browser/src/popup/main.ts @@ -1,6 +1,7 @@ import { enableProdMode } from "@angular/core"; import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; +import { PopupWidthService } from "../platform/popup/layout/popup-width.service"; import { BrowserPlatformUtilsService } from "../platform/services/platform-utils/browser-platform-utils.service"; require("./scss/popup.scss"); @@ -8,7 +9,8 @@ require("./scss/tailwind.css"); import { AppModule } from "./app.module"; -// We put this first to minimize the delay in window changing. +// We put these first to minimize the delay in window changing. +PopupWidthService.initBodyWidthFromLocalStorage(); // Should be removed once we deprecate support for Safari 16.0 and older. See Jira ticket [PM-1861] if (BrowserPlatformUtilsService.shouldApplySafariHeightFix(window)) { document.documentElement.classList.add("safari_height_fix"); diff --git a/apps/browser/src/popup/scss/base.scss b/apps/browser/src/popup/scss/base.scss index 89b8816567d..49847dd7778 100644 --- a/apps/browser/src/popup/scss/base.scss +++ b/apps/browser/src/popup/scss/base.scss @@ -19,7 +19,7 @@ body { } body { - width: 380px !important; + min-width: 380px; height: 600px !important; position: relative; min-height: 100vh; diff --git a/apps/browser/src/popup/services/services.module.ts b/apps/browser/src/popup/services/services.module.ts index 9a1acb54ab7..18d109776a4 100644 --- a/apps/browser/src/popup/services/services.module.ts +++ b/apps/browser/src/popup/services/services.module.ts @@ -1,4 +1,5 @@ import { APP_INITIALIZER, NgModule, NgZone } from "@angular/core"; +import { Router } from "@angular/router"; import { Subject, merge, of } from "rxjs"; import { CollectionService } from "@bitwarden/admin-console/common"; @@ -22,6 +23,7 @@ import { AnonLayoutWrapperDataService, LoginComponentService, LockComponentService, + LoginDecryptionOptionsService, } from "@bitwarden/auth/angular"; import { LockService, LoginEmailService, PinServiceAbstraction } from "@bitwarden/auth/common"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; @@ -115,6 +117,7 @@ import { PasswordRepromptService } from "@bitwarden/vault"; import { ForegroundLockService } from "../../auth/popup/accounts/foreground-lock.service"; import { ExtensionAnonLayoutWrapperDataService } from "../../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper-data.service"; import { ExtensionLoginComponentService } from "../../auth/popup/login/extension-login-component.service"; +import { ExtensionLoginDecryptionOptionsService } from "../../auth/popup/login-decryption-options/extension-login-decryption-options.service"; import { AutofillService as AutofillServiceAbstraction } from "../../autofill/services/abstractions/autofill.service"; import AutofillService from "../../autofill/services/autofill.service"; import { InlineMenuFieldQualificationService } from "../../autofill/services/inline-menu-field-qualification.service"; @@ -573,8 +576,9 @@ const safeProviders: SafeProvider[] = [ }), safeProvider({ provide: SdkClientFactory, - useClass: flagEnabled("sdk") ? BrowserSdkClientFactory : NoopSdkClientFactory, - deps: [], + useFactory: (logService) => + flagEnabled("sdk") ? new BrowserSdkClientFactory(logService) : new NoopSdkClientFactory(), + deps: [LogService], }), safeProvider({ provide: LoginEmailService, @@ -591,6 +595,11 @@ const safeProviders: SafeProvider[] = [ useExisting: PopupCompactModeService, deps: [], }), + safeProvider({ + provide: LoginDecryptionOptionsService, + useClass: ExtensionLoginDecryptionOptionsService, + deps: [MessagingServiceAbstraction, Router], + }), ]; @NgModule({ diff --git a/apps/browser/src/services/families-policy.service.spec.ts b/apps/browser/src/services/families-policy.service.spec.ts new file mode 100644 index 00000000000..19291bcd825 --- /dev/null +++ b/apps/browser/src/services/families-policy.service.spec.ts @@ -0,0 +1,83 @@ +import { TestBed } from "@angular/core/testing"; +import { mock, MockProxy } from "jest-mock-extended"; +import { firstValueFrom, of } from "rxjs"; + +import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; +import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; +import { Policy } from "@bitwarden/common/admin-console/models/domain/policy"; + +import { FamiliesPolicyService } from "./families-policy.service"; // Adjust the import as necessary + +describe("FamiliesPolicyService", () => { + let service: FamiliesPolicyService; + let organizationService: MockProxy; + let policyService: MockProxy; + + beforeEach(() => { + organizationService = mock(); + policyService = mock(); + + TestBed.configureTestingModule({ + providers: [ + FamiliesPolicyService, + { provide: OrganizationService, useValue: organizationService }, + { provide: PolicyService, useValue: policyService }, + ], + }); + + service = TestBed.inject(FamiliesPolicyService); + }); + + it("should return false when there are no enterprise organizations", async () => { + jest.spyOn(service, "hasSingleEnterpriseOrg$").mockReturnValue(of(false)); + + const result = await firstValueFrom(service.isFreeFamilyPolicyEnabled$()); + expect(result).toBe(false); + }); + + it("should return true when the policy is enabled for the one enterprise organization", async () => { + jest.spyOn(service, "hasSingleEnterpriseOrg$").mockReturnValue(of(true)); + + const organizations = [{ id: "org1", canManageSponsorships: true }] as Organization[]; + organizationService.getAll$.mockReturnValue(of(organizations)); + + const policies = [{ organizationId: "org1", enabled: true }] as Policy[]; + policyService.getAll$.mockReturnValue(of(policies)); + + const result = await firstValueFrom(service.isFreeFamilyPolicyEnabled$()); + expect(result).toBe(true); + }); + + it("should return false when the policy is not enabled for the one enterprise organization", async () => { + jest.spyOn(service, "hasSingleEnterpriseOrg$").mockReturnValue(of(true)); + + const organizations = [{ id: "org1", canManageSponsorships: true }] as Organization[]; + organizationService.getAll$.mockReturnValue(of(organizations)); + + const policies = [{ organizationId: "org1", enabled: false }] as Policy[]; + policyService.getAll$.mockReturnValue(of(policies)); + + const result = await firstValueFrom(service.isFreeFamilyPolicyEnabled$()); + expect(result).toBe(false); + }); + + it("should return true when there is exactly one enterprise organization that can manage sponsorships", async () => { + const organizations = [{ id: "org1", canManageSponsorships: true }] as Organization[]; + organizationService.getAll$.mockReturnValue(of(organizations)); + + const result = await firstValueFrom(service.hasSingleEnterpriseOrg$()); + expect(result).toBe(true); + }); + + it("should return false when there are multiple organizations that can manage sponsorships", async () => { + const organizations = [ + { id: "org1", canManageSponsorships: true }, + { id: "org2", canManageSponsorships: true }, + ] as Organization[]; + organizationService.getAll$.mockReturnValue(of(organizations)); + + const result = await firstValueFrom(service.hasSingleEnterpriseOrg$()); + expect(result).toBe(false); + }); +}); diff --git a/apps/browser/src/services/families-policy.service.ts b/apps/browser/src/services/families-policy.service.ts new file mode 100644 index 00000000000..426f39dcfd0 --- /dev/null +++ b/apps/browser/src/services/families-policy.service.ts @@ -0,0 +1,54 @@ +import { Injectable } from "@angular/core"; +import { map, Observable, of, switchMap } from "rxjs"; + +import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; +import { PolicyType } from "@bitwarden/common/admin-console/enums"; + +@Injectable({ providedIn: "root" }) +export class FamiliesPolicyService { + constructor( + private policyService: PolicyService, + private organizationService: OrganizationService, + ) {} + + hasSingleEnterpriseOrg$(): Observable { + // Retrieve all organizations the user is part of + return this.organizationService.getAll$().pipe( + map((organizations) => { + // Filter to only those organizations that can manage sponsorships + const sponsorshipOrgs = organizations.filter((org) => org.canManageSponsorships); + + // Check if there is exactly one organization that can manage sponsorships. + // This is important because users that are part of multiple organizations + // may always access free bitwarden family menu. We want to restrict access + // to the policy only when there is a single enterprise organization and the free family policy is turn. + return sponsorshipOrgs.length === 1; + }), + ); + } + + isFreeFamilyPolicyEnabled$(): Observable { + return this.hasSingleEnterpriseOrg$().pipe( + switchMap((hasSingleEnterpriseOrg) => { + if (!hasSingleEnterpriseOrg) { + return of(false); + } + return this.organizationService.getAll$().pipe( + map((organizations) => organizations.find((org) => org.canManageSponsorships)?.id), + switchMap((enterpriseOrgId) => + this.policyService + .getAll$(PolicyType.FreeFamiliesSponsorshipPolicy) + .pipe( + map( + (policies) => + policies.find((policy) => policy.organizationId === enterpriseOrgId)?.enabled ?? + false, + ), + ), + ), + ); + }), + ); + } +} diff --git a/apps/browser/src/tools/popup/settings/about-page/more-from-bitwarden-page-v2.component.html b/apps/browser/src/tools/popup/settings/about-page/more-from-bitwarden-page-v2.component.html index 9322ab5113e..a2d01ce752e 100644 --- a/apps/browser/src/tools/popup/settings/about-page/more-from-bitwarden-page-v2.component.html +++ b/apps/browser/src/tools/popup/settings/about-page/more-from-bitwarden-page-v2.component.html @@ -12,7 +12,12 @@
- + + - - -
- {{ "accountIsManagedMessage" | i18n: managingOrganization?.name }} + {{ "accountIsOwnedMessage" | i18n: managingOrganization?.name }} diff --git a/apps/web/src/app/auth/settings/security/security-routing.module.ts b/apps/web/src/app/auth/settings/security/security-routing.module.ts index ca1d7c6aa65..8af0499d05a 100644 --- a/apps/web/src/app/auth/settings/security/security-routing.module.ts +++ b/apps/web/src/app/auth/settings/security/security-routing.module.ts @@ -2,7 +2,7 @@ import { NgModule } from "@angular/core"; import { RouterModule, Routes } from "@angular/router"; import { ChangePasswordComponent } from "../change-password.component"; -import { TwoFactorSetupComponent } from "../two-factor-setup.component"; +import { TwoFactorSetupComponent } from "../two-factor/two-factor-setup.component"; import { SecurityKeysComponent } from "./security-keys.component"; import { SecurityComponent } from "./security.component"; diff --git a/apps/web/src/app/auth/settings/two-factor-recovery.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-recovery.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-recovery.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.ts similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-recovery.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.ts diff --git a/apps/web/src/app/auth/settings/two-factor-authenticator.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-authenticator.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.ts similarity index 95% rename from apps/web/src/app/auth/settings/two-factor-authenticator.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.ts index da5378f4790..a0187103913 100644 --- a/apps/web/src/app/auth/settings/two-factor-authenticator.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.ts @@ -18,7 +18,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { Utils } from "@bitwarden/common/platform/misc/utils"; import { DialogService, ToastService } from "@bitwarden/components"; -import { TwoFactorBaseComponent } from "./two-factor-base.component"; +import { TwoFactorSetupMethodBaseComponent } from "./two-factor-setup-method-base.component"; // NOTE: There are additional options available but these are just the ones we are current using. // See: https://github.com/neocotic/qrious#examples @@ -35,11 +35,11 @@ declare global { } @Component({ - selector: "app-two-factor-authenticator", - templateUrl: "two-factor-authenticator.component.html", + selector: "app-two-factor-setup-authenticator", + templateUrl: "two-factor-setup-authenticator.component.html", }) -export class TwoFactorAuthenticatorComponent - extends TwoFactorBaseComponent +export class TwoFactorSetupAuthenticatorComponent + extends TwoFactorSetupMethodBaseComponent implements OnInit, OnDestroy { @Output() onChangeStatus = new EventEmitter(); @@ -200,7 +200,7 @@ export class TwoFactorAuthenticatorComponent dialogService: DialogService, config: DialogConfig>, ) { - return dialogService.open(TwoFactorAuthenticatorComponent, config); + return dialogService.open(TwoFactorSetupAuthenticatorComponent, config); } async launchExternalUrl(url: string) { diff --git a/apps/web/src/app/auth/settings/two-factor-duo.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-duo.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-duo.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.ts similarity index 92% rename from apps/web/src/app/auth/settings/two-factor-duo.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.ts index 1a5b5917108..abb9b016165 100644 --- a/apps/web/src/app/auth/settings/two-factor-duo.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.ts @@ -13,13 +13,16 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service" import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { DialogService, ToastService } from "@bitwarden/components"; -import { TwoFactorBaseComponent } from "./two-factor-base.component"; +import { TwoFactorSetupMethodBaseComponent } from "./two-factor-setup-method-base.component"; @Component({ - selector: "app-two-factor-duo", - templateUrl: "two-factor-duo.component.html", + selector: "app-two-factor-setup-duo", + templateUrl: "two-factor-setup-duo.component.html", }) -export class TwoFactorDuoComponent extends TwoFactorBaseComponent implements OnInit { +export class TwoFactorSetupDuoComponent + extends TwoFactorSetupMethodBaseComponent + implements OnInit +{ @Output() onChangeStatus: EventEmitter = new EventEmitter(); type = TwoFactorProviderType.Duo; @@ -137,7 +140,7 @@ export class TwoFactorDuoComponent extends TwoFactorBaseComponent implements OnI dialogService: DialogService, config: DialogConfig, ) => { - return dialogService.open(TwoFactorDuoComponent, config); + return dialogService.open(TwoFactorSetupDuoComponent, config); }; } diff --git a/apps/web/src/app/auth/settings/two-factor-email.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-email.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-email.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.ts similarity index 92% rename from apps/web/src/app/auth/settings/two-factor-email.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.ts index 524b00d114f..5b1e5e60d75 100644 --- a/apps/web/src/app/auth/settings/two-factor-email.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.ts @@ -16,14 +16,17 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service" import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { DialogService, ToastService } from "@bitwarden/components"; -import { TwoFactorBaseComponent } from "./two-factor-base.component"; +import { TwoFactorSetupMethodBaseComponent } from "./two-factor-setup-method-base.component"; @Component({ - selector: "app-two-factor-email", - templateUrl: "two-factor-email.component.html", + selector: "app-two-factor-setup-email", + templateUrl: "two-factor-setup-email.component.html", outputs: ["onUpdated"], }) -export class TwoFactorEmailComponent extends TwoFactorBaseComponent implements OnInit { +export class TwoFactorSetupEmailComponent + extends TwoFactorSetupMethodBaseComponent + implements OnInit +{ @Output() onChangeStatus: EventEmitter = new EventEmitter(); type = TwoFactorProviderType.Email; sentEmail: string; @@ -139,6 +142,6 @@ export class TwoFactorEmailComponent extends TwoFactorBaseComponent implements O dialogService: DialogService, config: DialogConfig>, ) { - return dialogService.open(TwoFactorEmailComponent, config); + return dialogService.open(TwoFactorSetupEmailComponent, config); } } diff --git a/apps/web/src/app/auth/settings/two-factor-base.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-method-base.component.ts similarity index 96% rename from apps/web/src/app/auth/settings/two-factor-base.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-method-base.component.ts index 2a6af1df98c..0ea7ac0b6a1 100644 --- a/apps/web/src/app/auth/settings/two-factor-base.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-method-base.component.ts @@ -12,8 +12,11 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service" import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { DialogService, ToastService } from "@bitwarden/components"; +/** + * Base class for two-factor setup components (ex: email, yubikey, webauthn, duo). + */ @Directive() -export abstract class TwoFactorBaseComponent { +export abstract class TwoFactorSetupMethodBaseComponent { @Output() onUpdated = new EventEmitter(); type: TwoFactorProviderType; diff --git a/apps/web/src/app/auth/settings/two-factor-webauthn.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-webauthn.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-webauthn.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.ts similarity index 94% rename from apps/web/src/app/auth/settings/two-factor-webauthn.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.ts index 6dfee920991..120c2168e84 100644 --- a/apps/web/src/app/auth/settings/two-factor-webauthn.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.ts @@ -18,7 +18,7 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service" import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { DialogService, ToastService } from "@bitwarden/components"; -import { TwoFactorBaseComponent } from "./two-factor-base.component"; +import { TwoFactorSetupMethodBaseComponent } from "./two-factor-setup-method-base.component"; interface Key { id: number; @@ -29,10 +29,10 @@ interface Key { } @Component({ - selector: "app-two-factor-webauthn", - templateUrl: "two-factor-webauthn.component.html", + selector: "app-two-factor-setup-webauthn", + templateUrl: "two-factor-setup-webauthn.component.html", }) -export class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent { +export class TwoFactorSetupWebAuthnComponent extends TwoFactorSetupMethodBaseComponent { type = TwoFactorProviderType.WebAuthn; name: string; keys: Key[]; @@ -213,6 +213,6 @@ export class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent { dialogService: DialogService, config: DialogConfig>, ) { - return dialogService.open(TwoFactorWebAuthnComponent, config); + return dialogService.open(TwoFactorSetupWebAuthnComponent, config); } } diff --git a/apps/web/src/app/auth/settings/two-factor-yubikey.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-yubikey.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-yubikey.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.ts similarity index 93% rename from apps/web/src/app/auth/settings/two-factor-yubikey.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.ts index 3b601084c35..0b661bb6998 100644 --- a/apps/web/src/app/auth/settings/two-factor-yubikey.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.ts @@ -13,7 +13,7 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service" import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { DialogService, ToastService } from "@bitwarden/components"; -import { TwoFactorBaseComponent } from "./two-factor-base.component"; +import { TwoFactorSetupMethodBaseComponent } from "./two-factor-setup-method-base.component"; interface Key { key: string; @@ -21,10 +21,13 @@ interface Key { } @Component({ - selector: "app-two-factor-yubikey", - templateUrl: "two-factor-yubikey.component.html", + selector: "app-two-factor-setup-yubikey", + templateUrl: "two-factor-setup-yubikey.component.html", }) -export class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent implements OnInit { +export class TwoFactorSetupYubiKeyComponent + extends TwoFactorSetupMethodBaseComponent + implements OnInit +{ type = TwoFactorProviderType.Yubikey; keys: Key[]; anyKeyHasNfc = false; @@ -169,6 +172,6 @@ export class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent implements dialogService: DialogService, config: DialogConfig>, ) { - return dialogService.open(TwoFactorYubiKeyComponent, config); + return dialogService.open(TwoFactorSetupYubiKeyComponent, config); } } diff --git a/apps/web/src/app/auth/settings/two-factor-setup.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-setup.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-setup.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts similarity index 90% rename from apps/web/src/app/auth/settings/two-factor-setup.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts index 3b8a9edd955..d4cbb5b0791 100644 --- a/apps/web/src/app/auth/settings/two-factor-setup.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts @@ -29,13 +29,13 @@ import { ProductTierType } from "@bitwarden/common/billing/enums"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { DialogService } from "@bitwarden/components"; -import { TwoFactorAuthenticatorComponent } from "./two-factor-authenticator.component"; -import { TwoFactorDuoComponent } from "./two-factor-duo.component"; -import { TwoFactorEmailComponent } from "./two-factor-email.component"; import { TwoFactorRecoveryComponent } from "./two-factor-recovery.component"; +import { TwoFactorSetupAuthenticatorComponent } from "./two-factor-setup-authenticator.component"; +import { TwoFactorSetupDuoComponent } from "./two-factor-setup-duo.component"; +import { TwoFactorSetupEmailComponent } from "./two-factor-setup-email.component"; +import { TwoFactorSetupWebAuthnComponent } from "./two-factor-setup-webauthn.component"; +import { TwoFactorSetupYubiKeyComponent } from "./two-factor-setup-yubikey.component"; import { TwoFactorVerifyComponent } from "./two-factor-verify.component"; -import { TwoFactorWebAuthnComponent } from "./two-factor-webauthn.component"; -import { TwoFactorYubiKeyComponent } from "./two-factor-yubikey.component"; @Component({ selector: "app-two-factor-setup", @@ -142,7 +142,7 @@ export class TwoFactorSetupComponent implements OnInit, OnDestroy { if (!result) { return; } - const authComp: DialogRef = TwoFactorAuthenticatorComponent.open( + const authComp: DialogRef = TwoFactorSetupAuthenticatorComponent.open( this.dialogService, { data: result }, ); @@ -160,7 +160,7 @@ export class TwoFactorSetupComponent implements OnInit, OnDestroy { if (!result) { return; } - const yubiComp: DialogRef = TwoFactorYubiKeyComponent.open( + const yubiComp: DialogRef = TwoFactorSetupYubiKeyComponent.open( this.dialogService, { data: result }, ); @@ -177,11 +177,14 @@ export class TwoFactorSetupComponent implements OnInit, OnDestroy { if (!result) { return; } - const duoComp: DialogRef = TwoFactorDuoComponent.open(this.dialogService, { - data: { - authResponse: result, + const duoComp: DialogRef = TwoFactorSetupDuoComponent.open( + this.dialogService, + { + data: { + authResponse: result, + }, }, - }); + ); this.twoFactorSetupSubscription = duoComp.componentInstance.onChangeStatus .pipe(first(), takeUntil(this.destroy$)) .subscribe((enabled: boolean) => { @@ -196,7 +199,7 @@ export class TwoFactorSetupComponent implements OnInit, OnDestroy { if (!result) { return; } - const emailComp: DialogRef = TwoFactorEmailComponent.open( + const emailComp: DialogRef = TwoFactorSetupEmailComponent.open( this.dialogService, { data: result, @@ -216,7 +219,7 @@ export class TwoFactorSetupComponent implements OnInit, OnDestroy { if (!result) { return; } - const webAuthnComp: DialogRef = TwoFactorWebAuthnComponent.open( + const webAuthnComp: DialogRef = TwoFactorSetupWebAuthnComponent.open( this.dialogService, { data: result }, ); diff --git a/apps/web/src/app/auth/settings/two-factor-verify.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-verify.component.html similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-verify.component.html rename to apps/web/src/app/auth/settings/two-factor/two-factor-verify.component.html diff --git a/apps/web/src/app/auth/settings/two-factor-verify.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-verify.component.ts similarity index 100% rename from apps/web/src/app/auth/settings/two-factor-verify.component.ts rename to apps/web/src/app/auth/settings/two-factor/two-factor-verify.component.ts diff --git a/apps/web/src/app/billing/services/free-families-policy.service.ts b/apps/web/src/app/billing/services/free-families-policy.service.ts new file mode 100644 index 00000000000..cc53e0a32bc --- /dev/null +++ b/apps/web/src/app/billing/services/free-families-policy.service.ts @@ -0,0 +1,125 @@ +import { Injectable } from "@angular/core"; +import { combineLatest, filter, from, map, Observable, of, switchMap } from "rxjs"; + +import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; +import { PolicyType } from "@bitwarden/common/admin-console/enums"; +import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; +import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; + +interface EnterpriseOrgStatus { + isFreeFamilyPolicyEnabled: boolean; + belongToOneEnterpriseOrgs: boolean; + belongToMultipleEnterpriseOrgs: boolean; +} + +@Injectable({ providedIn: "root" }) +export class FreeFamiliesPolicyService { + protected enterpriseOrgStatus: EnterpriseOrgStatus = { + isFreeFamilyPolicyEnabled: false, + belongToOneEnterpriseOrgs: false, + belongToMultipleEnterpriseOrgs: false, + }; + + constructor( + private policyService: PolicyService, + private organizationService: OrganizationService, + private configService: ConfigService, + ) {} + + get showFreeFamilies$(): Observable { + return this.isFreeFamilyFlagEnabled$.pipe( + switchMap((isFreeFamilyFlagEnabled) => + isFreeFamilyFlagEnabled + ? this.getFreeFamiliesVisibility$() + : this.organizationService.canManageSponsorships$, + ), + ); + } + + private getFreeFamiliesVisibility$(): Observable { + return combineLatest([ + this.checkEnterpriseOrganizationsAndFetchPolicy(), + this.organizationService.canManageSponsorships$, + ]).pipe( + map(([orgStatus, canManageSponsorships]) => + this.shouldShowFreeFamilyLink(orgStatus, canManageSponsorships), + ), + ); + } + + private shouldShowFreeFamilyLink( + orgStatus: EnterpriseOrgStatus | null, + canManageSponsorships: boolean, + ): boolean { + if (!orgStatus) { + return false; + } + const { belongToOneEnterpriseOrgs, isFreeFamilyPolicyEnabled } = orgStatus; + return canManageSponsorships && !(belongToOneEnterpriseOrgs && isFreeFamilyPolicyEnabled); + } + + checkEnterpriseOrganizationsAndFetchPolicy(): Observable { + return this.organizationService.organizations$.pipe( + filter((organizations) => Array.isArray(organizations) && organizations.length > 0), + switchMap((organizations) => this.fetchEnterpriseOrganizationPolicy(organizations)), + ); + } + + private fetchEnterpriseOrganizationPolicy( + organizations: Organization[], + ): Observable { + const { belongToOneEnterpriseOrgs, belongToMultipleEnterpriseOrgs } = + this.evaluateEnterpriseOrganizations(organizations); + + if (!belongToOneEnterpriseOrgs) { + return of({ + isFreeFamilyPolicyEnabled: false, + belongToOneEnterpriseOrgs, + belongToMultipleEnterpriseOrgs, + }); + } + + const organizationId = this.getOrganizationIdForOneEnterprise(organizations); + if (!organizationId) { + return of({ + isFreeFamilyPolicyEnabled: false, + belongToOneEnterpriseOrgs, + belongToMultipleEnterpriseOrgs, + }); + } + + return this.policyService.getAll$(PolicyType.FreeFamiliesSponsorshipPolicy).pipe( + map((policies) => ({ + isFreeFamilyPolicyEnabled: policies.some( + (policy) => policy.organizationId === organizationId && policy.enabled, + ), + belongToOneEnterpriseOrgs, + belongToMultipleEnterpriseOrgs, + })), + ); + } + + private evaluateEnterpriseOrganizations(organizations: any[]): { + belongToOneEnterpriseOrgs: boolean; + belongToMultipleEnterpriseOrgs: boolean; + } { + const enterpriseOrganizations = organizations.filter((org) => org.canManageSponsorships); + const count = enterpriseOrganizations.length; + + return { + belongToOneEnterpriseOrgs: count === 1, + belongToMultipleEnterpriseOrgs: count > 1, + }; + } + + private getOrganizationIdForOneEnterprise(organizations: any[]): string | null { + const enterpriseOrganizations = organizations.filter((org) => org.canManageSponsorships); + return enterpriseOrganizations.length === 1 ? enterpriseOrganizations[0].id : null; + } + + private get isFreeFamilyFlagEnabled$(): Observable { + return from(this.configService.getFeatureFlag(FeatureFlag.DisableFreeFamiliesSponsorship)); + } +} diff --git a/apps/web/src/app/billing/settings/sponsored-families.component.ts b/apps/web/src/app/billing/settings/sponsored-families.component.ts index c098b6044c8..f49e7acce29 100644 --- a/apps/web/src/app/billing/settings/sponsored-families.component.ts +++ b/apps/web/src/app/billing/settings/sponsored-families.component.ts @@ -8,13 +8,17 @@ import { AsyncValidatorFn, ValidationErrors, } from "@angular/forms"; -import { firstValueFrom, map, Observable, Subject, takeUntil } from "rxjs"; +import { combineLatest, firstValueFrom, map, Observable, Subject, takeUntil } from "rxjs"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; +import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { PlanSponsorshipType } from "@bitwarden/common/billing/enums"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; +import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; @@ -31,6 +35,7 @@ interface RequestSponsorshipForm { }) export class SponsoredFamiliesComponent implements OnInit, OnDestroy { loading = false; + isFreeFamilyFlagEnabled: boolean; availableSponsorshipOrgs$: Observable; activeSponsorshipOrgs$: Observable; @@ -53,6 +58,8 @@ export class SponsoredFamiliesComponent implements OnInit, OnDestroy { private formBuilder: FormBuilder, private accountService: AccountService, private toastService: ToastService, + private configService: ConfigService, + private policyService: PolicyService, ) { this.sponsorshipForm = this.formBuilder.group({ selectedSponsorshipOrgId: new FormControl("", { @@ -72,10 +79,34 @@ export class SponsoredFamiliesComponent implements OnInit, OnDestroy { } async ngOnInit() { - this.availableSponsorshipOrgs$ = this.organizationService.organizations$.pipe( - map((orgs) => orgs.filter((o) => o.familySponsorshipAvailable)), + this.isFreeFamilyFlagEnabled = await this.configService.getFeatureFlag( + FeatureFlag.DisableFreeFamiliesSponsorship, ); + if (this.isFreeFamilyFlagEnabled) { + this.availableSponsorshipOrgs$ = combineLatest([ + this.organizationService.organizations$, + this.policyService.getAll$(PolicyType.FreeFamiliesSponsorshipPolicy), + ]).pipe( + map(([organizations, policies]) => + organizations + .filter((org) => org.familySponsorshipAvailable) + .map((org) => ({ + organization: org, + isPolicyEnabled: policies.some( + (policy) => policy.organizationId === org.id && policy.enabled, + ), + })) + .filter(({ isPolicyEnabled }) => !isPolicyEnabled) + .map(({ organization }) => organization), + ), + ); + } else { + this.availableSponsorshipOrgs$ = this.organizationService.organizations$.pipe( + map((orgs) => orgs.filter((o) => o.familySponsorshipAvailable)), + ); + } + this.availableSponsorshipOrgs$.pipe(takeUntil(this._destroy)).subscribe((orgs) => { if (orgs.length === 1) { this.sponsorshipForm.patchValue({ diff --git a/apps/web/src/app/billing/settings/sponsoring-org-row.component.html b/apps/web/src/app/billing/settings/sponsoring-org-row.component.html index b07cbbfad12..eeeaa256049 100644 --- a/apps/web/src/app/billing/settings/sponsoring-org-row.component.html +++ b/apps/web/src/app/billing/settings/sponsoring-org-row.component.html @@ -18,7 +18,11 @@ + diff --git a/apps/web/src/app/tools/credential-generator/credential-generator.component.ts b/apps/web/src/app/tools/credential-generator/credential-generator.component.ts index 9eb4b0a0814..f252796d062 100644 --- a/apps/web/src/app/tools/credential-generator/credential-generator.component.ts +++ b/apps/web/src/app/tools/credential-generator/credential-generator.component.ts @@ -1,6 +1,10 @@ import { Component } from "@angular/core"; -import { GeneratorModule } from "@bitwarden/generator-components"; +import { ButtonModule, DialogService, ItemModule, LinkModule } from "@bitwarden/components"; +import { + CredentialGeneratorHistoryDialogComponent, + GeneratorModule, +} from "@bitwarden/generator-components"; import { HeaderModule } from "../../layouts/header/header.module"; import { SharedModule } from "../../shared"; @@ -9,6 +13,12 @@ import { SharedModule } from "../../shared"; standalone: true, selector: "credential-generator", templateUrl: "credential-generator.component.html", - imports: [SharedModule, HeaderModule, GeneratorModule], + imports: [SharedModule, HeaderModule, GeneratorModule, ItemModule, ButtonModule, LinkModule], }) -export class CredentialGeneratorComponent {} +export class CredentialGeneratorComponent { + constructor(private dialogService: DialogService) {} + + openHistoryDialog = () => { + this.dialogService.open(CredentialGeneratorHistoryDialogComponent); + }; +} diff --git a/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts b/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts index 85faac0c08c..527f00d58f8 100644 --- a/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts +++ b/apps/web/src/app/vault/individual-vault/add-edit-v2.component.ts @@ -130,6 +130,8 @@ export class AddEditComponentV2 implements OnInit { return this.i18nService.t(partOne, this.i18nService.t("typeIdentity").toLowerCase()); case CipherType.SecureNote: return this.i18nService.t(partOne, this.i18nService.t("note").toLowerCase()); + case CipherType.SshKey: + return this.i18nService.t(partOne, this.i18nService.t("typeSshKey").toLowerCase()); } } diff --git a/apps/web/src/app/vault/individual-vault/add-edit.component.ts b/apps/web/src/app/vault/individual-vault/add-edit.component.ts index b4bd42a3894..8f8c4779514 100644 --- a/apps/web/src/app/vault/individual-vault/add-edit.component.ts +++ b/apps/web/src/app/vault/individual-vault/add-edit.component.ts @@ -100,6 +100,14 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On async ngOnInit() { await super.ngOnInit(); await this.load(); + + // https://bitwarden.atlassian.net/browse/PM-10413 + // cannot generate ssh keys so block creation + if (this.type === CipherType.SshKey && this.cipherId == null) { + this.type = CipherType.Login; + this.cipher.type = CipherType.Login; + } + this.viewOnly = !this.cipher.edit && this.editMode; // remove when all the title for all clients are updated to New Item if (this.cloneMode || !this.editMode) { diff --git a/apps/web/src/app/vault/individual-vault/view.component.ts b/apps/web/src/app/vault/individual-vault/view.component.ts index d30c453a4bd..779035c972b 100644 --- a/apps/web/src/app/vault/individual-vault/view.component.ts +++ b/apps/web/src/app/vault/individual-vault/view.component.ts @@ -184,6 +184,8 @@ export class ViewComponent implements OnInit { return this.i18nService.t("viewItemType", this.i18nService.t("typeCard").toLowerCase()); case CipherType.Identity: return this.i18nService.t("viewItemType", this.i18nService.t("typeIdentity").toLowerCase()); + case CipherType.SshKey: + return this.i18nService.t("viewItemType", this.i18nService.t("typeSshKey").toLowerCase()); default: return null; } diff --git a/apps/web/src/connectors/duo-redirect.ts b/apps/web/src/connectors/duo-redirect.ts index 2b8a3de4de1..a113c6b9756 100644 --- a/apps/web/src/connectors/duo-redirect.ts +++ b/apps/web/src/connectors/duo-redirect.ts @@ -51,14 +51,12 @@ window.addEventListener("load", async () => { */ function redirectToDuoFrameless(redirectUrl: string) { const validateUrl = new URL(redirectUrl); + const validDuoUrl = + validateUrl.protocol === "https:" && + (validateUrl.hostname.endsWith(".duosecurity.com") || + validateUrl.hostname.endsWith(".duofederal.com")); - if ( - validateUrl.protocol !== "https:" || - !( - validateUrl.hostname.endsWith("duosecurity.com") || - validateUrl.hostname.endsWith("duofederal.com") - ) - ) { + if (!validDuoUrl) { throw new Error("Invalid redirect URL"); } diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 0ae1b27853d..0930f9b0e7e 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Teken aan met hoofwagwoord" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "’n Kennisgewing is na u toestel gestuur." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Weergawe $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Moenie weer vra om die vingerafdrukfrase te bevestig nie", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Vereis indien Entiteit-ID nie ’n bronadres is nie." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Opsionele aanpassings" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Gebruikersnaamtipe" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index e178169d5d2..7a5e63d9b85 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "تسجيل الدخول باستخدام الجهاز يجب أن يتم إعداده في إعدادات تطبيق Bitwarden. هل تحتاج إلى خيار آخر؟" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "تسجيل الدخول باستخدام كلمة المرور الرئيسية" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "تم إرسال إشعار إلى جهازك." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "الإصدار $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "عرض جميع خيارات تسجيل الدخول" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index 3478c6fcfdd..47b0ee377e7 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Cihazla giriş, Bitwarden tətbiqinin ayarlarında qurulmalıdır. Başqa bir seçimə ehtiyacınız var?" }, + "needAnotherOptionV1": { + "message": "Başqa bir seçimə ehtiyacınız var?" + }, "loginWithMasterPassword": { "message": "Ana parolla giriş et" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Cihazınıza bir bildiriş göndərildi." }, + "aNotificationWasSentToYourDevice": { + "message": "Cihazınıza bir bildiriş göndərildi" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Hesabınızın kilidinin açıq olduğuna və barmaq izi ifadəsinin digər cihazda uyuşduğuna əmin olun" + }, "versionNumber": { "message": "Versiya $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Bütün giriş seçimlərinə bax" + }, "viewAllLoginOptions": { "message": "Bütün giriş etmə seçimlərinə bax" }, @@ -4443,6 +4455,9 @@ "message": "Barmaq izi ifadəsini təkrar soruşma", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Tələbiniz təsdiqləndikdə bildiriş alacaqsınız" + }, "free": { "message": "Ödənişsiz", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Varlıq Kimliyi bir URL deyilsə tələb olunur." }, + "offerNoLongerValid": { + "message": "Bu təklif artıq yararlı deyil. Daha çox məlumat üçün təşkilatınızın inzibatçısı ilə əlaqə saxlayın." + }, "openIdOptionalCustomizations": { "message": "İxtiyari Özəlləşdirmələr" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "E-poçt yarat" }, - "generatorBoundariesHint": { - "message": "Dəyər $MIN$-$MAX$ arasında olmalıdır", + "spinboxBoundariesHint": { + "message": "Dəyər, $MIN$-$MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Güclü bir parol yaratmaq üçün $RECOMMENDED$ və ya daha çox xarakter istifadə edin.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Güclü bir keçid ifadəsi yaratmaq üçün $RECOMMENDED$ və ya daha çox söz istifadə edin.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "İstifadəçi adı növü" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Giriş başladıldı" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Cihaz təsdiqi tələb olunur. Aşağıdan bir təsdiq variantı seçin:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Bu cihazı xatırla" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "İstifadəçi e-poçtu əskikdir" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Cihaz güvənlidir" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Uğurla silindi" + }, + "freeFamiliesSponsorship": { + "message": "Ödənişsiz Bitwarden Families sponsorluğunu sil" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Üzvlərin bu təşkilat vasitəsilə Families planını istifadə etməsinə icazə verməyin." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Bank hesabı ilə ödəniş, yalnız Amerika Birləşmiş Ştatlarındakı müştərilər üçün əlçatandır. Bank hesabınızı doğrulamağınız tələb olunacaq. Növbəti 1-2 iş günü ərzində mikro depozit qoyacağıq. Bank hesabını yoxlamaq üçün bu depozitdəki əməliyyat açıqlayıcı kodunu təşkilatın faktura səhifəsində daxil edin. Bank hesabı doğrulanmadıqda ödəniş buraxılacaq və abunəliyiniz dayandırılacaq." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Bank hesabınıza mikro depozit qoymuşuq (bu, 1-2 iş günü çəkə bilər). Depozit açıqlamasındakı 'SM' ilə başlayan altı rəqəmli kodu daxil edin. Bank hesabı doğrulanmadıqda ödəniş buraxılacaq və abunəliyiniz dayandırılacaq." + }, + "descriptorCode": { + "message": "Açıqlayıcı kod" } } diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 310c6c61483..0e709bc33c1 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Неабходна наладзіць уваход з прыладай у наладах мабільнай праграмы Bitwarden. Патрабуецца іншы варыянт?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Увайсці з асноўным паролем" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Апавяшчэнне было адпраўлена на вашу прыладу." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Версія $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Паглядзець усе варыянты ўваходу" }, @@ -4443,6 +4455,9 @@ "message": "Ніколі не пытаць пра праверку фразы адбітку пальца для запрошаных карыстальнікаў (не рэкамендуецца)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Бясплатна", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Патрабуецца, калі ідэнтыфікатар аб'екта не з'яўляецца URL-адрасам." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Дадатковыя дапасаванні" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тып імя карыстальніка" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Ініцыяваны ўваход" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Патрабуецца ўхваленне прылады. Выберыце параметры ўхвалення ніжэй:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запомніць гэту прыладу" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Адсутнічае электронная пошта карыстальніка" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Давераная прылада" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index 6cc07fda6c0..bbdb722984d 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Вписването с устройство трябва да е включено в настройките на приложението на Битуорден. Друга настройка ли търсите?" }, + "needAnotherOptionV1": { + "message": "Предпочитате друг вариант?" + }, "loginWithMasterPassword": { "message": "Вписване с главната парола" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Към устройството Ви е изпратено известие." }, + "aNotificationWasSentToYourDevice": { + "message": "Към устройството Ви е изпратено известие" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Уверете се, че регистрацията Ви е отключена и че уникалната фраза съвпада с другото устройство" + }, "versionNumber": { "message": "Версия $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Вижте всички възможности за вписване" + }, "viewAllLoginOptions": { "message": "Вижте всички възможности за вписване" }, @@ -4443,6 +4455,9 @@ "message": "Без повторно питане за уникалната фраза", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Ще получите уведомление когато заявката бъде одобрена" + }, "free": { "message": "Безплатно", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "Това предложение е вече не важи. Свържете се с администраторите на организацията си за повече информация." + }, "openIdOptionalCustomizations": { "message": "Незадължителни персонализации" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Генериране на електронна поща" }, - "generatorBoundariesHint": { - "message": "Стойността трябва да бъде между $MIN$ и $MAX$", + "spinboxBoundariesHint": { + "message": "Стойността трябва да бъде между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Използвайте поне $RECOMMENDED$ знака, за да генерирате сложна парола.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Използвайте поне $RECOMMENDED$ думи, за да генерирате сложна парола-фраза.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип потребителско име" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Вписването е стартирано" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Изисква се одобрение на устройството. Изберете начин за одобрение по-долу:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запомняне на това устройство" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Липсва е-поща на потребителя" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Устройството е доверено" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Успешно изтриване" + }, + "freeFamiliesSponsorship": { + "message": "Премахване на безплатното спонсориране на Битуорден за семейства" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Да не се разрешава на членовете да се възползват от Семейния план чрез тази организация." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Плащането чрез банкова сметка е налично само за клиенти от САЩ. Ще трябва да потвърдите банковата си сметка. В следващите 1-2 работни дни ще направим малък депозит. Въведете кода от описанието на трансакцията в страницата за плащанията на организацията, за да потвърдите банковата сметка. Ако не потвърдите банковата сметка, може да пропуснете плащането и абонаментът Ви да бъде спрян." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Направихме малък депозит по банковата Ви сметка (може да отнеме 1-2 дни да го видите). Въведете шест цифрения код, започващ с „SM“, който ще намерите в описанието на трансакцията. Ако не потвърдите банковата сметка, може да пропуснете плащането и абонаментът Ви да бъде спрян." + }, + "descriptorCode": { + "message": "Код от описанието" } } diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index 70b014ab83c..6cf67fcee66 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "সংস্করণ $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 96a2b2ce1ab..9e221e721fe 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Verzija $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index 2d3edcecf6b..4e5e78f3c58 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "L'inici de sessió amb el dispositiu ha d'estar activat a la configuració de l'aplicació Bitwarden. Necessiteu una altra opció?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Inici de sessió amb contrasenya mestra" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "S'ha enviat una notificació al vostre dispositiu." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versió $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Veure totes les opcions d'inici de sessió" }, @@ -4443,6 +4455,9 @@ "message": "No sol·liciteu tornar a comprovar la frase de les empremtes dactilars (No recomanat)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratuït", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Requerit si l'identificador d'entitat no és un URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Personalització opcional" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipus de nom d'usuari" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "S'ha iniciat la sessió" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Cal l'aprovació del dispositiu. Seleccioneu una opció d'aprovació a continuació:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Recorda aquest dispositiu" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Falta el correu electrònic de l'usuari" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositiu de confiança" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index b523fb03742..2135f0e01ab 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Přihlášení zařízením musí být nastaveno v aplikaci Bitwarden. Potřebujete další volby?" }, + "needAnotherOptionV1": { + "message": "Potřebujete další volby?" + }, "loginWithMasterPassword": { "message": "Přihlásit se pomocí hlavního hesla" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Na Vaše zařízení bylo odesláno oznámení." }, + "aNotificationWasSentToYourDevice": { + "message": "Na Vaše zařízení bylo odesláno oznámení" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Ujistěte se, že je Váš trezor odemčen a fráze otisku prstu se shodují s druhým zařízením" + }, "versionNumber": { "message": "Verze $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Zobrazit všechny volby přihlášení" + }, "viewAllLoginOptions": { "message": "Zobrazit všechny volby přihlášení" }, @@ -4443,6 +4455,9 @@ "message": "Nikdy se neptat na ověření frází otisků prstů pro pozvané uživatele (nedoporučeno)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Budete upozorněni, jakmile bude žádost schválena" + }, "free": { "message": "Zdarma", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Vyžadováno, pokud ID entity není URL." }, + "offerNoLongerValid": { + "message": "Tato nabídka již není platná. Pro více informací kontaktujte správce organizace." + }, "openIdOptionalCustomizations": { "message": "Volitelné úpravy" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Vygenerovat e-mail" }, - "generatorBoundariesHint": { - "message": "Hodnota musí být mezi $MIN$ a $MAX$", + "spinboxBoundariesHint": { + "message": "Hodnota musí být mezi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Použijte $RECOMMENDED$ nebo více znaků k vytvoření silného hesla.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Použijte $RECOMMENDED$ slov nebo více slov k vytvoření silné heslové fráze.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Typ uživatelského jména" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Bylo zahájeno přihlášení" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Vyžaduje se schválení zařízení. Vyberte možnost schválení níže:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamatovat toto zařízení" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Chybí e-mail uživatele" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Zařízení zařazeno mezi důvěryhodné" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Úspěšně smazáno" + }, + "freeFamiliesSponsorship": { + "message": "Odebrat sponzorství Free Bitwarden Families" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Nedovolí, aby členové mohli prostřednictvím této organizace uplatnit Free Bitwarden Families." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Platba bankovním účtem je dostupná jen pro zákazníky ve Spojených státech. Budete požádáni o ověření Vašeho bankovního účtu. Mikrovklad provedeme během následujících 1-2 pracovních dnů. Pro ověření bankovního účtu zadejte kód popisu výpisu z této zálohy na fakturační stránce organizace. Pokud bankovní účet neověříte, bude to mít za následek neprovedení platby a pozastavení předplatného." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Na Váš bankovní účet jsme provedli mikrovklad (může to trvat 1-2 pracovní dny). Zadejte šestimístný kód začínající písmenem \"SM\", který najdete v popisu vkladu. Pokud bankovní účet neověříte, bude to mít za následek neprovedení platby a pozastavení předplatného." + }, + "descriptorCode": { + "message": "Kód z popisu" } } diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 13bdd6d966a..0839ac7f9f8 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index d0f75dce423..e1cb4d28f2f 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log ind med enhed skal være opsat i indstillingerne i Bitwarden-appen. Brug for en anden mulighed?" }, + "needAnotherOptionV1": { + "message": "Behov for en anden mulighed?" + }, "loginWithMasterPassword": { "message": "Log ind med hovedadgangskode" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "En notifikation er sendt til din enhed." }, + "aNotificationWasSentToYourDevice": { + "message": "En notifikation er sendt til enheden" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Sørg for, at boksen er oplåst, samt at fingeraftrykssætningen matcher på den anden enhed" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Vis alle indlogningsmuligheder" + }, "viewAllLoginOptions": { "message": "Vis alle indlogningsmuligheder" }, @@ -4443,6 +4455,9 @@ "message": "Bed aldrig om at bekræfte fingeraftrykssætninger for inviterede brugere (anbefales ikke)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Man vil få besked, når anmodningen er godkendt" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Obligatorisk, såfremt Enheds-ID ikke er en URL." }, + "offerNoLongerValid": { + "message": "Dette tilbud er udløbet. Kontakt organisationsadministratorer for mere information." + }, "openIdOptionalCustomizations": { "message": "Valgfrie tilpasninger" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generér e-mail" }, - "generatorBoundariesHint": { - "message": "Værdi skal være mellem $MIN$ og $MAX$", + "spinboxBoundariesHint": { + "message": "Værdi skal være mellem $MIN$ og $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Brug minimum $RECOMMENDED$ tegn for at generere en stærk adgangskode.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Brug minimum $RECOMMENDED$ ord for at generere en stærk adgangssætning.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Brugernavnstype" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Indlogning påbegyndt" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Enhedsgodkendelse kræves. Vælg en godkendelsesmulighed nedenfor:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Husk denne enhed" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Brugers e-mail mangler" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Enhed betroet" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Slettet" + }, + "freeFamiliesSponsorship": { + "message": "Fjern Gratis Bitwarden Families-sponsorering" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Tillad ikke medlemmer at indløse en Families-abonnementstype via denne organisation." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Betaling via bankkonto er kun tilgængelig for kunder i USA. Man anmodes om at bekræfte sin bankkonto. Vi vil foretage en mikro-indbetaling inden for de næste 1-2 arbejdsdage. Indtast kontoudtogsbeskrivelseskoden fra denne indbetaling på organisationens faktureringsside for at bekræfte bankkontoen. Manglende bekræftelse af bankkontoen vil resultere i manglende betaling, hvorefter abonnementet suspenderes." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Vi har foretaget en mikro-indbetaling på den oplyste bankkonto (hvilket kan tage 1-2 hverdage). Angiv den sekscifrede kode startende med 'SM' fra på indbetalingsbeskrivelsen. Manglende bekræftelse af bankkontoen vil resultere i manglende betaling, hvorefter abonnementet suspenderes." + }, + "descriptorCode": { + "message": "Beskrivelseskode" } } diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index c42121fdac1..7e79831c54d 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Die Anmeldung über ein Gerät muss in den Einstellungen der Bitwarden App eingerichtet werden. Benötigst du eine andere Option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Mit Master-Passwort anmelden" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Eine Benachrichtigung wurde an dein Gerät gesendet." }, + "aNotificationWasSentToYourDevice": { + "message": "Eine Benachrichtigung wurde an dein Gerät gesendet" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Alle Anmeldeoptionen anzeigen" }, @@ -4443,6 +4455,9 @@ "message": "Keine Aufforderung zur Überprüfung von Fingerabdruck-Phrasen für eingeladene Benutzer (nicht empfohlen)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Erforderlich, wenn die Entitäts-ID keine URL ist." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optionale Anpassungen" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "E-Mail generieren" }, - "generatorBoundariesHint": { - "message": "Wert muss zwischen $MIN$ und $MAX$ liegen", + "spinboxBoundariesHint": { + "message": "Wert muss zwischen $MIN$ und $MAX$ liegen.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Benutze $RECOMMENDED$ oder mehr Zeichen um ein starkes Passwort zu generieren.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Benutzernamenstyp" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Anmeldung eingeleitet" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Geräte-Genehmigung erforderlich. Wähle unten eine Genehmigungsoption aus:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Dieses Gerät merken" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "E-Mail-Adresse des Benutzers fehlt" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Gerät wird vertraut" }, @@ -9625,7 +9675,7 @@ "message": "Bist du sicher, dass du diesen Anhang dauerhaft löschen möchtest?" }, "manageSubscriptionFromThe": { - "message": "Manage subscription from the", + "message": "verwalten", "description": "This represents the beginning of a sentence. The full sentence will be 'Manage subscription from the Provider Portal', but 'Provider Portal' will be a link and thus cannot be included in the translation file." }, "toHostBitwardenOnYourOwnServer": { @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Erfolgreich gelöscht" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 22084f0f35b..aa9cb47b135 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Η σύνδεση με τη χρήση συσκευής πρέπει να οριστεί στις ρυθμίσεις της εφαρμογής Bitwarden. Χρειάζεστε κάποια άλλη επιλογή;" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Συνδεθείτε με τον κύριο κωδικό πρόσβασης" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Μια ειδοποίηση έχει σταλεί στη συσκευή σας." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Έκδοση $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Δείτε όλες τις επιλογές σύνδεσης" }, @@ -4443,6 +4455,9 @@ "message": "Ποτέ μην παρακινείτε να επαληθεύσετε φράσεις fingerprint για τους προσκεκλημένους χρήστες (Δεν συνιστάται)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Δωρεάν", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Απαιτείται εάν το ID οντότητας δεν είναι URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Προαιρετικές Προσαρμογές" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Τύπος Ονόματος Χρήστη" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Η σύνδεση ξεκίνησε" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Απομνημόνευση συσκευής" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Απουσιάζει η διεύθυνση email του χρήστη" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index ff3f0505699..eb98a1d7577 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -1642,9 +1642,27 @@ "passwordHistory": { "message": "Password history" }, + "generatorHistory": { + "message": "Generator history" + }, + "clearGeneratorHistoryTitle": { + "message": "Clear generator history" + }, + "cleargGeneratorHistoryDescription": { + "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + }, "noPasswordsInList": { "message": "There are no passwords to list." }, + "clearHistory": { + "message": "Clear history" + }, + "nothingToShow": { + "message": "Nothing to show" + }, + "nothingGeneratedRecently": { + "message": "You haven't generated anything recently" + }, "clear": { "message": "Clear", "description": "To clear something out. Example: To clear browser history." @@ -1767,8 +1785,8 @@ "sessionsDeauthorized": { "message": "All sessions deauthorized" }, - "accountIsManagedMessage": { - "message": "This account is managed by $ORGANIZATIONNAME$", + "accountIsOwnedMessage": { + "message": "This account is owned by $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -8051,9 +8069,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8283,6 +8310,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -8378,9 +8408,6 @@ "collectionManagementDesc": { "message": "Manage the collection behavior for the organization" }, - "limitCollectionCreationDeletionDesc": { - "message": "Limit collection creation and deletion to owners and admins" - }, "limitCollectionCreationDesc": { "message": "Limit collection creation to owners and admins" }, diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index f9e5362af2d..90393341342 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organisation administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customisations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organisation." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organisation's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index b32eed6fc16..ba89bea21cc 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Don't ask to verify fingerprint phrase again", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organisation administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customisations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organisation." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organisation's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 92695ab7f65..eab492710a8 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Saluti kun la ĉefpasvorto" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versio $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Ne petu kontroli denove fingrospuran frazon", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Senpaga", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index 1a6577ac72a..1a51107dfe9 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Iniciar sesión con el dispositivo debe configurarse en los ajustes de la aplicación Bitwarden. ¿Necesitas otra opción?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Iniciar sesión con contraseña maestra" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Se ha enviado una notificación a tu dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versión $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Ver todas las opciones de inicio de sesión" }, @@ -4443,6 +4455,9 @@ "message": "No pida verificar la frase de la huella dactilar de nuevo", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Requerido si el ID de la entidad no es una URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Personalizaciones opcionales" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo de nombre de usuario" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Inicio de sesión en proceso" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Se requiere aprobación en el dispositivo. Seleccione una opción de aprobación a continuación:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Recordar en este dispositivo" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Falta el correo electrónico del usuario" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositivo de confianza" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 5ff8e9dddb2..01b64364eaa 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Bitwardeni rakenduse seadistuses peab olema konfigureeritud sisselogimine läbi seadme. Soovid teist valikut?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Logi sisse ülemparooliga" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Sinu seadmesse saadeti teavitus." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versioon $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Vaata kõiki sisselogimise valikuid" }, @@ -4443,6 +4455,9 @@ "message": "Ära enam küsi kutsutud kasutajate unikaalse sõnajada kinnitamist (mittesoovitatav)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Tasuta", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Kasutajanime tüüp" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index cd3af6a03f6..158233471d5 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Hasi saioa pasahitz nagusiarekin" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Jakinarazpen bat bidali da zure gailura." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "$VERSION_NUMBER$ bertsioa", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Ikusi erregistro guztiak ezarpenetan" }, @@ -4443,6 +4455,9 @@ "message": "Inoiz ez da beharrezkoa gonbidatutako erabiltzaileentzat hatz-marka esaldiak egiaztatzea (ez da gomendatzen)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Doan", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Beharrezkoa da entitatearen ID-a URL bat ez bada." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Aukerako pertsonalizazioa" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Erabiltzaile izen mota" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index 23ee6873249..870ffb1f8ed 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "ورود به سیستم با دستگاه باید در تنظیمات برنامه‌ی Bitwarden تنظیم شود. به گزینه دیگری نیاز دارید؟" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "با کلمه عبور اصلی وارد شوید" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "یک اعلان به دستگاه شما ارسال شده است." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "نسخه $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "مشاهده همه گزینه‌های ورود به سیستم" }, @@ -4443,6 +4455,9 @@ "message": "هرگز تأیید عبارات اثر انگشت را برای کاربران دعوت شده درخواست نکنید (توصیه نمی‌شود)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "رايگان", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "اگر شناسه موجودیت یک نشانی اینترنتی نباشد، الزامی است." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "سفارشی سازی اختیاری" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "نوع نام کاربری" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "ورود به سیستم آغاز شد" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "تأیید دستگاه لازم است. یک روش تأیید انتخاب کنید:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "این دستگاه را به خاطر بسپار" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "ایمیل کاربر وجود ندارد" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "دستگاه مورد اعتماد است" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 99d3836ddb4..95aa99cdb72 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Laitteella kirjautuminen on määritettävä Bitwarden-sovelluksen asetuksista. Tarvitsetko eri vaihtoehdon?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Kirjaudu pääsalasanalla" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Laitteellesi on lähetetty ilmoitus." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versio $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Näytä kaikki kirjautumisvaihtoehdot" + }, "viewAllLoginOptions": { "message": "Näytä kaikki kirjautumisvaihtoehdot" }, @@ -4443,6 +4455,9 @@ "message": "Älä koskaan kehota vahvistamaan kutsuttujen käyttäjien tunnistelausekkeita (ei suositella)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Ilmainen", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Vaaditaan, jos Entity ID ei ole kelvollinen URL-osoite." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Valinnaiset mukautukset" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Luo sähköpostiosoite" }, - "generatorBoundariesHint": { - "message": "Arvon tulee olla väliltä $MIN$—$MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Käyttäjätunnuksen tyyppi" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Kirjautuminen aloitettu" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Laitehyväksyntä vaaditaan. Valitse hyväksyntätapa alta:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Muista tämä laite" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Käyttäjän sähköpostiosoite puuttuu" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Laitteeseen luotettu" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Poisto onnistui" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index 089e0819456..44ecebc6e6e 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Mag-log in gamit ang master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Nakapagpadala na ng notipikasyon sa device mo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Bersyon $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Tingnan ang lahat ng mga pagpipilian sa pag log in" }, @@ -4443,6 +4455,9 @@ "message": "Huwag kailanman mag prompt upang i verify ang mga parirala ng fingerprint para sa mga inimbitahang gumagamit (hindi inirerekomenda)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Libre", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Kinakailangan kung ang Entity ID ay hindi isang URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Opsyonal na mga pagpapasadya" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Uri ng username" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index a54829a55b2..fe0e9dc0e5e 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "La connexion avec l'appareil doit être configurée dans les paramètres de l'application Bitwarden. Besoin d'une autre option ?" }, + "needAnotherOptionV1": { + "message": "Besoin d'une autre option ?" + }, "loginWithMasterPassword": { "message": "Se connecter avec le mot de passe principal" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Une notification a été envoyée à votre appareil." }, + "aNotificationWasSentToYourDevice": { + "message": "Une notification a été envoyée à votre appareil" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Assurez-vous que votre compte est déverrouillé et que la phrase d'empreinte correspond à l'autre appareil" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Afficher toutes les options de connexion" + }, "viewAllLoginOptions": { "message": "Voir toutes les options de connexion" }, @@ -4443,6 +4455,9 @@ "message": "Ne jamais demander de vérifier la phrase d'empreinte pour les utilisateurs invités (non recommandé)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Vous serez notifié une fois que la demande sera approuvée" + }, "free": { "message": "Gratuit", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Requis si l'ID d'Entité n'est pas une URL." }, + "offerNoLongerValid": { + "message": "Cette offre n'est plus valide. Contactez les administrateurs de votre organisation pour plus d'informations." + }, "openIdOptionalCustomizations": { "message": "Personnalisations Optionnelles" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Générer un courriel" }, - "generatorBoundariesHint": { - "message": "La valeur doit être comprise entre $MIN$ et $MAX$", + "spinboxBoundariesHint": { + "message": "La valeur doit être comprise entre $MIN$ et $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Utilisez des caractères $RECOMMENDED$ ou plus pour générer un mot de passe fort.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Utilisez des mots $RECOMMENDED$ ou plus pour générer une phrase de passe forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Type de Nom d'Utilisateur" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Connexion initiée" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "L'approbation de l'appareil est requise. Sélectionnez une option d'approbation ci-dessous:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Se souvenir de cet appareil" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Courriel de l'utilisateur manquant" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Appareil de confiance" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Supprimé avec succès" + }, + "freeFamiliesSponsorship": { + "message": "Supprimer le parrainage gratuit de Bitwarden Familles" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "N'autorisez pas les membres à échanger un plan Familles par l'intermédiaire de cette organisation." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Le paiement avec un compte bancaire est seulement disponible pour les clients aux États-Unis. Vous devrez procéder à la vérification de votre compte bancaire. Nous effectuerons un micro-dépôt dans les 2 prochains jours ouvrables. Entrez le code du descripteur de relevé de ce dépôt sur la page de facturation de l'organisation pour compléter la vérification du compte bancaire. Si vous ne complétez pas la vérification de votre compte bancaire, cela résultera en un paiement manqué et votre abonnement sera suspendu." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Nous avons effectué un micro-dépôt dans votre compte bancaire (cela peut prendre jusqu'à 2 jours ouvrables). Entrez le code à six chiffres commençant par 'SM' trouvé dans la description du dépôt. Si vous ne complétez pas la vérification de votre compte bancaire, cela résultera en un paiement manqué et votre abonnement sera suspendu." + }, + "descriptorCode": { + "message": "Code descripteur" } } diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index 93d22f98157..a492300c132 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index 2da0a5146c7..411ef267e40 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "גרסה $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "אל תבקש ממני לאמת את משפט טביעת האצבע יותר", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "חינם", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index b5f5a885fc2..2cd148e301d 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 280936ab7e6..2fc33c3b348 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Prijava uređajem mora biti namještena u postavka Bitwarden mobilne aplikacije. Trebaš drugu opciju?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Prijava glavnom lozinkom" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Obavijest je poslana na tvoj uređaj." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Verzija $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Pogledaj sve mogućnosti prijave" }, @@ -4443,6 +4455,9 @@ "message": "Nikada ne traži potvrdu jedinstvene fraze za pozvane korisnike (nije preporučeno)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Besplatno", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Obavezan Enditiy ID nije URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Izborne prilagodbe" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tip korisničkog imena" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Prijava pokrenuta" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Potrebno je odobriti uređaj. Odaberi metodu odobravanja:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamti ovaj uređaj" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Nedostaje e-pošta korisnika" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Uređaj pouzdan" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index f49500502e7..2ae6a5f699e 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Az eszközzel történő bejelentkezést be kell állítani a Bitwarden alkalmazás beállításaiban. Más opcióra van szükség?" }, + "needAnotherOptionV1": { + "message": "Másik opció szükséges?" + }, "loginWithMasterPassword": { "message": "Bejelentkezés mesterjelszóval" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A rendszer értesítést küldött az eszközre." }, + "aNotificationWasSentToYourDevice": { + "message": "Egy értesítés lett elküldve az eszközre." + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Ellenőrizzük, hogy a széf feloldásra került és az ujjlenyomat kifejezés egyezik a másik eszközön levővel." + }, "versionNumber": { "message": "Verzió: $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Összes bejelentkezési opció megtekintése" + }, "viewAllLoginOptions": { "message": "Összes bejelentkezési opció megtekintése" }, @@ -4443,6 +4455,9 @@ "message": "Soha ne kérjük a meghívottak ujjlenyomat kifejezésének ellenőrzését (nem ajánlott)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "A kérelem jóváhagyása után értesítés érkezik." + }, "free": { "message": "Ingyenes", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Szükséges ha az entitás azonosító nem webcím." }, + "offerNoLongerValid": { + "message": "Ez az ajánlat már nem érvényes. További információkért vegyük fel a kapcsolatot a szervezeti adminisztrátorokkal." + }, "openIdOptionalCustomizations": { "message": "Opcionális testreszabások" }, @@ -6468,7 +6486,7 @@ "generateEmail": { "message": "Email generálása" }, - "generatorBoundariesHint": { + "spinboxBoundariesHint": { "message": "Az érték legyen $MIN$ és $MAX$ között.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Használjunk $RECOMMENDED$ vagy több karaktert egy erős jelszó előállításához.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": "Használjunk $RECOMMENDED$ vagy több szót erős jelmondat generálásához.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Felhasználónév típusa" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "A bejelentkezés elindításra került." }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Az eszköz jóváhagyása szükséges. Válasszunk egy jóváhagyási lehetőséget lentebb:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Eszköz megjegyzése" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "A felhasználói email cím hiányzik." }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Az eszköz megbízható." }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "A törlés sikeres volt." + }, + "freeFamiliesSponsorship": { + "message": "Az ingyenes Bitwarden Családok szponzorálásának eltávolítása" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Ne engedjük meg a tagoknak, hogy beváltsák a Családi csomagot ezen a szervezeten keresztül." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "A bankszámlával történő fizetés csak az Egyesült Államokban élő ügyfelek számára érhető el. A bankszámlát igazolni kell. A fejlesztők a következő 1-2 munkanapon belül mikrobetétet teljesítenek. A bankszámla ellenőrzéséhez írjuk be az utalás leíró kódját a szervezet számlázási oldalán. Ha elmulasztjuk a bankszámla igazolását, az a fizetés elmaradását és az előfizetés felfüggesztését vonja maga után." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "A fejlesztők mikrobetétet utaltak bankszámlánkra (ez 1-2 munkanapot is igénybe vehet). Adjuk meg a befizetés leírásában található, 'SM' kezdetű hatjegyű kódot. Ha elmulasztjuk a bankszámla igazolását, az a fizetés elmaradását és az előfizetés felfüggesztését vonja maga után." + }, + "descriptorCode": { + "message": "Leíró kód" } } diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index 9b45583fdd2..9bc97de8a39 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Masuk dengan kata sandi utama" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versi $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Lihat semua opsi log in" }, @@ -4443,6 +4455,9 @@ "message": "Jangan tanya untuk memverifikasi frase sidik jari lagi", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Diperlukan jika Entity ID bukan sebuah URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Kustomisasi Opsional" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Jenis nama pengguna" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index 7b427a2f70c..321e52e4b16 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "L'accesso con dispositivo deve essere abilitato nelle impostazioni dell'app Bitwarden. Ti serve un'altra opzione?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Accedi con password principale" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Una notifica è stata inviata al tuo dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versione $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Visualizza tutte le opzioni di accesso" }, @@ -4443,6 +4455,9 @@ "message": "Non chiedermi di verificare la frase impronta per utenti invitati (non consigliato)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Obbligatorio se l'ID dell'entità non è un URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Personalizzazioni facoltative" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo di nome utente" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Accesso avviato" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Approvazione del dispositivo obbligatoria. Seleziona un'opzione di approvazione:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Ricorda questo dispositivo" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Email utente mancante" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositivo fidato" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index d52ccda55ce..429727af207 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Bitwarden アプリで「デバイスでログイン」の設定をする必要があります。別のオプションが必要ですか?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "マスターパスワードでログイン" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "デバイスに通知を送信しました。" }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "バージョン $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "すべてのログインオプションを表示" }, @@ -4443,6 +4455,9 @@ "message": "今後パスフレーズを確認しない", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "無料", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "エンティティ ID が URL でない場合は必須です。" }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "オプションのカスタマイズ" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "ユーザー名の種類" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "ログイン開始" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "デバイスの承認が必要です。以下から承認オプションを選択してください:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "このデバイスを記憶する" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "ユーザーのメールアドレスがありません" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "信頼されたデバイス" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index 4f30f626c41..d03ea968163 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "ავტორიზაცია მთავარი პაროლით" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "შეტყობინება გამოიგზავნა თქვენი ტელეფონის მისამართით." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "ვერსია $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 97202b069db..24d2cfb901e 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index a0e7192bf07..cc80dfcbd46 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Master password ಉಪಯೋಗಿಸಿ ಲಾಗಿನ್ ಮಾಡಿ" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "ಆವೃತ್ತಿ $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "ಫಿಂಗರ್ಪ್ರಿಂಟ್ ನುಡಿಗಟ್ಟು ಮತ್ತೆ ಪರಿಶೀಲಿಸಲು ಕೇಳಬೇಡಿ", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "ಉಚಿತ", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index c792d77c2f0..5ccd3e177ac 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "기기로 로그인은 Bitwarden 앱 설정에서 구성돼야 합니다. 다른 방식이 필요하신가요?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "마스터 비밀번호로 로그인" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "기기에 알림이 전송되었습니다." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "버전 $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "모든 로그인 방식 보기" }, @@ -4443,6 +4455,9 @@ "message": "초대된 사용자의 지문 구절을 확인하지 않음 (권장되지 않음)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "무료", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "이 기기 기억하기" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 47ed8a05ee9..af4908ab00f 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Ir jāuzstāda pieteikšanās ar ierīci Bitwarden lietotnes iestatījumos. Nepieciešama cita iespēja?" }, + "needAnotherOptionV1": { + "message": "Nepieciešama cita iespēja?" + }, "loginWithMasterPassword": { "message": "Pieteikties ar galveno paroli" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Uz ierīci ir nosūtīts paziņojums." }, + "aNotificationWasSentToYourDevice": { + "message": "Uz ierīci tika nosūtīts paziņojums" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Lūgums pārliecināties, ka konts ir atslēgts un atpazīšanas vārdkopa ir tāda pati arī otrā ierīcē" + }, "versionNumber": { "message": "Laidiens $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Skatīt visas pieteikšanās iespējas" + }, "viewAllLoginOptions": { "message": "Skatīt visas pieteikšanās iespējas" }, @@ -4443,6 +4455,9 @@ "message": "Vairs nevaicāt pārbaudīt atpazīšanas vārdkopu", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Tiks paziņots, tiklīdz pieprasījums būs apstiprināts" + }, "free": { "message": "Bezmaksas", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Nepieciešams, ja vienības Id nav URL." }, + "offerNoLongerValid": { + "message": "Šis piedāvājums vairs nav derīgs. Jāsazinās ar savas apvienības pārvaldītājiem, lai iegūtu vairāk informācijas." + }, "openIdOptionalCustomizations": { "message": "Papildu pielāgojumi" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Izveidot e-pasta adresi" }, - "generatorBoundariesHint": { - "message": "Vērtībai jābūt starp $MIN$ un $MAX$", + "spinboxBoundariesHint": { + "message": "Vērtībai jābūt starp $MIN$ un $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Jāizmanto $RECOMMENDED$ vai vairāk rakstzīmju, la izveidotu spēcīgu paroli.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Jāizmanto $RECOMMENDED$ vai vairāk vārdu, lai aizveidotu spēcīgu parles vārdkopu.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Lietotājvārda veids" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Uzsākta pieteikšanās" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Nepieciešams ierīces apstiprinājums. Zemāk jāatlasa apstiprinājuma iespēja:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Atcerēties šo ierīci" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Trūkst lietotāja e-pasta adreses" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Ierīce ir uzticama" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Veiksmīgi izdzēsts" + }, + "freeFamiliesSponsorship": { + "message": "Noņemt bezmaksas Bitwarden ģimeņu pabalstītājdarbību" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Neļaut dalībniekiem iegūt plānu \"Ģimenes\" caur šo apvienību." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Apmaksa ar bankas kontu ir pieejama tikai klientiem Savienotajās Valstīs. Būs nepieciešams apliecināt savu bankas kontu. Mēs veiksim sīkiemaksu nākamās darba dienas vai divu laikā. Pēc tam šīs iemaksas uzdevuma aprakstā esošais kods būs jāievada apvienības apmaksas lapā, lai apliecinātu bankas kontu. Bankas konta apliecināšanas neveikšana beigsies ar nokavētu maksājumu un apturētu abonementu." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Mēs veicām sīkiemaksu Tavā bankas kontā (tas var aizņemt 1 līdz 2 darba dienas). Jāievada iemaksas aprakstā atrodamais sešu ciparu kods, kas sākas ar \"SM\". Bankas konta apliecināšans neveikšana beigsies ar nokavētu maksājumu un apturētu abonementu." + }, + "descriptorCode": { + "message": "Apraksta kods" } } diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index 7e9ecb2f648..51d65c719c2 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "വേർഷൻ $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "ഫിംഗർപ്രിന്റ് വാചകം പരിശോധിക്കാൻ ആവശ്യപ്പെടരുത്", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "സൗജന്യം ", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index 97202b069db..24d2cfb901e 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 97202b069db..24d2cfb901e 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 13a374a8358..43ba5fea306 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Logg på med enhet må settes opp i Bitwarden-innstillingene. Trenger du et annet alternativ?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Logg på med hovedpassord" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Et varsel har blitt sendt til enheten din." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versjon $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Vis alle påloggingsalternativer" }, @@ -4443,6 +4455,9 @@ "message": "Ikke be om bekreftelse av fingeravtrykksfrase flere ganger", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Kreves hvis enhets-ID ikke er en URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Valgfrie tilpasninger" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Brukernavntype" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index e8e1a66ea67..079a4217a0f 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index d2e7837e956..460fc01addb 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Je moet Inloggen met apparaat instellen in de instellingen van de Bitwarden-app. Behoefte aan een andere mogelijkheid?" }, + "needAnotherOptionV1": { + "message": "Nog een optie nodig?" + }, "loginWithMasterPassword": { "message": "Inloggen met je hoofdwachtwoord" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Er is een bericht naar je apparaat verstuurd." }, + "aNotificationWasSentToYourDevice": { + "message": "Er is een melding naar je apparaat verzonden" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Zorg ervoor dat je kluis is ontgrendeld en de vingerafdrukzin hetzelfde is op het andere apparaat" + }, "versionNumber": { "message": "Versie $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Alle inlogopties bekijken" + }, "viewAllLoginOptions": { "message": "Alle loginopties bekijken" }, @@ -4443,6 +4455,9 @@ "message": "Vraag nooit om de vingerafdrukzin te controleren voor uitgenodigde leden (niet aanbevolen)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Je krijgt een melding zodra de aanvraag is goedgekeurd" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Vereist als Entiteit ID geen URL is." }, + "offerNoLongerValid": { + "message": "Deze aanbieding is niet langer geldig. Neem contact op met je organisatiebeheerders voor meer informatie." + }, "openIdOptionalCustomizations": { "message": "Optionele aanpassingen" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "E-mailadres genereren" }, - "generatorBoundariesHint": { - "message": "Waarde moet tussen $MIN$ en $MAX$ liggen", + "spinboxBoundariesHint": { + "message": "Waarde moet tussen $MIN$ en $MAX$ liggen.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Gebruik $RECOMMENDED$ tekens of meer om een sterk wachtwoord te genereren.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Gebruik $RECOMMENDED$ woorden of meer om een sterke wachtwoordzin te genereren.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Type gebruikersnaam" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Inloggen gestart" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Onthoud dit apparaat om in het vervolg naadloos in te loggen" + }, "deviceApprovalRequired": { "message": "Apparaattoestemming vereist. Kies een goedkeuringsoptie hieronder:" }, + "deviceApprovalRequiredV2": { + "message": "Toestemming apparaat vereist" + }, + "selectAnApprovalOptionBelow": { + "message": "Kies hieronder een goedkeuringsoptie" + }, "rememberThisDevice": { "message": "Dit apparaat onthouden" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Gebruikerse-mailadres ontbreekt" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "E-mailadres voor actieve gebruiker niet gevonden. Je wordt uitgelogd." + }, "deviceTrusted": { "message": "Vertrouwd apparaat" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Succesvol verwijderd" + }, + "freeFamiliesSponsorship": { + "message": "Gratis Bitwarden Families-sponsoring verwijderen" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Sta leden niet toe om een familieplan te verzilveren via deze organisatie." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Betaling met een bankrekening is alleen beschikbaar voor klanten in de Verenigde Staten. Je moet je bankrekening verifiëren. We zullen binnen 1-2 werkdagen een microbetaling uitvoeren. Voer de code van het bankafschrift uit deze storting in op de factuurpagina van de organisatie om de bankrekening te verifiëren. Als de bankrekening niet wordt geverifieerd, wordt er een betaling gemist en wordt je abonnement opgeschort." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We hebben een microbetaling op je bankrekening gedaan (dit kan 1-2 werkdagen duren). Voer de zescijferige code van je bankafschrift in die begint met 'SM'. Als de bankrekening niet wordt geverifieerd, wordt er een betaling gemist en wordt je abonnement opgeschort." + }, + "descriptorCode": { + "message": "Code bankafschrift" } } diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index 6b87f79c916..b47839aa8ec 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 97202b069db..24d2cfb901e 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index 918c5f238c6..6cabe22b906 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Logowanie za pomocą urządzenia musi być włączone w ustawieniach aplikacji Bitwarden. Potrzebujesz innej opcji?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Logowanie hasłem głównym" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Powiadomienie zostało wysłane na urządzenie." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Wersja $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Zobacz wszystkie sposoby logowania" }, @@ -4443,6 +4455,9 @@ "message": "Nie pytaj ponownie o weryfikację unikalnego identyfikatora konta dla zaproszonych użytkowników (niezalecane)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Darmowy", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Wymagane, jeśli identyfikatorem podmiotu nie jest adres URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Opcjonalne dostosowania" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Rodzaj nazwy użytkownika" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Logowanie rozpoczęte" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamiętaj to urządzenie" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Brak adresu e-mail użytkownika" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Zaufano urządzeniu" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index 6a88cdde5ac..4f86642b058 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Login com dispositivo deve ser habilitado nas configurações do aplicativo móvel do Bitwarden. Necessita de outra opção?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Entrar com senha mestra" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Uma notificação foi enviada para seu dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versão $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Ver todas as opções de login" }, @@ -4443,6 +4455,9 @@ "message": "Não peça para verificar a frase biométrica novamente", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratuito", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Necessário se o ID da Entidade não for um URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Personalizações opcionais" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Gerar e-mail" }, - "generatorBoundariesHint": { - "message": "Valor deve ser entre $MIN$ e $MAX$", + "spinboxBoundariesHint": { + "message": "Valor deve ser entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ caracteres ou mais para gerar uma senha forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use palavras $RECOMMENDED$ ou mais para gerar uma frase secreta forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo de Usuário" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Sessão iniciada" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Aprovação do dispositivo necessária. Selecione uma opção de aprovação abaixo:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Lembrar deste dispositivo" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "E-mail do usuário ausente" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dispositivo confiável" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Excluído com sucesso" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index c1a74bdcb02..92e5c0c88e0 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "O início de sessão com o dispositivo deve ser ativado nas definições da aplicação Bitwarden. Precisa de outra opção?" }, + "needAnotherOptionV1": { + "message": "Precisa de outra opção?" + }, "loginWithMasterPassword": { "message": "Iniciar sessão com a palavra-passe mestra" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Foi enviada uma notificação para o seu dispositivo." }, + "aNotificationWasSentToYourDevice": { + "message": "Foi enviada uma notificação para o seu dispositivo" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Certifique-se de que a sua conta está desbloqueada e que a frase de impressão digital corresponde à do outro dispositivo" + }, "versionNumber": { "message": "Versão $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Ver todas as opções de início de sessão" + }, "viewAllLoginOptions": { "message": "Ver todas as opções de início de sessão" }, @@ -4443,6 +4455,9 @@ "message": "Nunca solicitar a verificação de frases de impressões digitais para utilizadores convidados (não recomendado)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Será notificado quando o pedido for aprovado" + }, "free": { "message": "Gratuito", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Necessário se o ID da entidade não for um URL." }, + "offerNoLongerValid": { + "message": "Esta oferta já não é válida. Contacte os administradores da sua organização para obter mais informações." + }, "openIdOptionalCustomizations": { "message": "Personalizações opcionais" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Gerar e-mail" }, - "generatorBoundariesHint": { - "message": "O valor deve estar entre $MIN$ e $MAX$", + "spinboxBoundariesHint": { + "message": "O valor deve estar entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Utilize $RECOMMENDED$ caracteres ou mais para gerar uma palavra-passe forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Utilize $RECOMMENDED$ palavras ou mais para gerar uma frase de acesso forte.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tipo de nome de utilizador" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "A preparar o início de sessão" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Memorizar este dispositivo para facilitar futuros inícios de sessão" + }, "deviceApprovalRequired": { "message": "É necessária a aprovação do dispositivo. Selecione uma opção de aprovação abaixo:" }, + "deviceApprovalRequiredV2": { + "message": "Aprovação do dispositivo necessária" + }, + "selectAnApprovalOptionBelow": { + "message": "Selecione uma opção de aprovação abaixo" + }, "rememberThisDevice": { "message": "Lembrar este dispositivo" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "E-mail do utilizador em falta" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "O e-mail do utilizador ativo não foi encontrado. A terminar a sessão." + }, "deviceTrusted": { "message": "Dispositivo de confiança" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Eliminados com sucesso" + }, + "freeFamiliesSponsorship": { + "message": "Remover o patrocínio do plano Bitwarden Familiar Gratuito" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Não permitir que os membros resgatem um plano Familiar através desta organização." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "O pagamento com uma conta bancária só está disponível para clientes nos Estados Unidos. Ser-lhe-á pedido que verifique a sua conta bancária. Efetuaremos um micro-depósito nos próximos 1-2 dias úteis. Introduza o código descritor do extrato deste depósito na página de faturação da organização para verificar a conta bancária. A não verificação da conta bancária resultará na falta de pagamento e na suspensão da sua subscrição." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Efetuámos um micro-depósito na sua conta bancária (pode demorar 1-2 dias úteis). Introduza o código de seis dígitos que começa por \"SM\" e que se encontra na descrição do depósito. Se a conta bancária não for verificada, o pagamento não será efetuado e a sua subscrição será suspensa." + }, + "descriptorCode": { + "message": "Código descritor" } } diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 83573b51071..e8e76e800e2 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Autentificați-vă cu parola principală" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "O notificare a fost trimisă pe dispozitivul dvs." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Versiunea $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Vedeți toate opțiunile de autentificare" }, @@ -4443,6 +4455,9 @@ "message": "Nu solicitați niciodată verificarea frazelor amprentă pentru utilizatorii invitați (nerecomandat)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratuit", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Necesar dacă ID-ul de entitate nu este un URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Personalizări opționale" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Tip de nume de utilizator" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index 158b71d7985..e560c4d7be1 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Вход с устройства должен быть настроен в настройках мобильного приложения Bitwarden. Нужен другой вариант?" }, + "needAnotherOptionV1": { + "message": "Нужен другой вариант?" + }, "loginWithMasterPassword": { "message": "Войти с мастер-паролем" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "На ваше устройство отправлено уведомление." }, + "aNotificationWasSentToYourDevice": { + "message": "На ваше устройство было отправлено уведомление" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Убедитесь, что ваш аккаунт разблокирован и фраза отпечатка совпадает с фразой на другом устройстве" + }, "versionNumber": { "message": "Версия $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Посмотреть все варианты авторизации" + }, "viewAllLoginOptions": { "message": "Посмотреть все варианты авторизации" }, @@ -4443,6 +4455,9 @@ "message": "Никогда не запрашивать верификацию фразы отпечатка для приглашенных пользователей (не рекомендуется)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Вы получите уведомление, когда запрос будет одобрен" + }, "free": { "message": "Бесплатно", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Обязательно, если ID сущности не является URL." }, + "offerNoLongerValid": { + "message": "Это предложение больше не действует. Для получения дополнительной информации обратитесь к администраторам вашей организации." + }, "openIdOptionalCustomizations": { "message": "Дополнительные настройки" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Сгенерировать email" }, - "generatorBoundariesHint": { - "message": "Значение должно быть между $MIN$ и $MAX$", + "spinboxBoundariesHint": { + "message": "Значение должно быть между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Для создания надежного пароля используйте $RECOMMENDED$ символов или больше.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Для создания надежной парольной фразы используйте $RECOMMENDED$ слов или больше.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип имени пользователя" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Вход инициирован" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Требуется одобрение устройства. Выберите вариант ниже:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запомнить это устройство" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Отсутствует email пользователя" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Доверенное устройство" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Успешно удален" + }, + "freeFamiliesSponsorship": { + "message": "Удалить спонсорство Free Bitwarden Families" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Не разрешать участникам выкупать план Families через эту организацию." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Оплата с помощью банковского счета доступна только для клиентов в США. Вам потребуется подтвердить свой банковский счет. Мы сделаем микродепозит в течение следующих 1-2 рабочих дней. Введите код дескриптора выписки из этого депозита на странице выставления счетов организации, чтобы подтвердить банковский счет. Неподтверждение банковского счета приведет к пропуску платежа и приостановке подписки." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Мы перевели микродепозит на ваш банковский счет (это может занять 1-2 рабочих дня). Введите шестизначный код, начинающийся с 'SM', который указан в описании депозита. Если вы не подтвердите банковский счет, это приведет к пропуску платежа и приостановке подписки." + }, + "descriptorCode": { + "message": "Код дескриптора" } } diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index fe0862104f1..ce6b049315a 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index 1080bcc3a74..839bc75a876 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Prihlásenie pomocou zariadenia musí byť nastavené v nastaveniach aplikácie Bitwarden. Potrebujete inú možnosť?" }, + "needAnotherOptionV1": { + "message": "Potrebujete inú možnosť?" + }, "loginWithMasterPassword": { "message": "Prihlásenie pomocou hlavného hesla" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Do vášho zariadenia bolo odoslané upozornenie." }, + "aNotificationWasSentToYourDevice": { + "message": "Do vášho zariadenia bolo odoslané upozornenie" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Uistite sa, že je váš účet odomknutý a fráza odtlačku prsta sa zhoduje s frázou na druhom zariadení" + }, "versionNumber": { "message": "Verzia $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Zobraziť všetky možnosti prihlásenia" + }, "viewAllLoginOptions": { "message": "Zobraziť všetky možnosti prihlásenia" }, @@ -4443,6 +4455,9 @@ "message": "Nepýtať sa pozvaných používateľov na overenie frázy odtlačku. (neodporúča sa)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Po schválení žiadosti budete informovaní" + }, "free": { "message": "Zadarmo", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "Táto ponuka už nie je platná. Pre viac informácií kontaktujte správcu vašej organizácie." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generovať e-mail" }, - "generatorBoundariesHint": { - "message": "Hodnota musí byť medzi $MIN$ a $MAX$", + "spinboxBoundariesHint": { + "message": "Hodnota musí byť medzi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Na vytvorenie silného hesla použite $RECOMMENDED$ znakov alebo viac.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Na vytvorenie silnej prístupovej frázy použite $RECOMMENDED$ slov alebo viac.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Typ používateľského mena" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Iniciované prihlásenie" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Vyžaduje sa schválenie zariadenia. Vyberte možnosť schválenia nižšie:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Zapamätať si toto zariadenie" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Chýba e-mail používateľa" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Dôveryhodné zariadenie" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Úspešne odstránené" + }, + "freeFamiliesSponsorship": { + "message": "Odstrániť sponzorovaný bezplatný Bitwarden plán pre Rodiny" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Neumožnite členom používať plán pre rodiny prostredníctvom tejto organizácie." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Platba prostredníctvom bankového účtu je dostupná len pre zákazníkov v Spojených Štátoch. Budete musieť overiť svoj bankový účet. V priebehu nasledujúcich 1-2 pracovných dní vykonáme mikro vklad. Na overenie bankového účtu zadajte kód popisu výpisu z tohto vkladu na fakturačnej stránke organizácie. Neoverenie bankového účtu bude mať za následok neuskutočnenie platby a pozastavenie vášho predplatného." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "Na váš bankový účet sme vykonali mikro vklad (môže to trvať 1-2 pracovné dni). Zadajte šesťmiestny kód začínajúci na „SM“, ktorý nájdete v popise vkladu. Neoverenie bankového účtu bude mať za následok neuskutočnenie platby a pozastavenie vášho predplatného." + }, + "descriptorCode": { + "message": "Kód výpisu" } } diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index 3b7eceff937..92583805086 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Prijava z glavnim geslom" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Na vašo napravo smo poslali obvestilo." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Različica $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Prikaži vse možnosti prijave" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Vrsta uporabniškega imena" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index 1756619acd4..7966b20f89f 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Пријава помоћу уређаја мора бити подешена у подешавањима Bitwarden апликације. Потребна је друга опција?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Пријавите се са главном лозинком" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Обавештење је послато на ваш уређај." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Верзија $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "Погледајте сав извештај у опције" }, @@ -4443,6 +4455,9 @@ "message": "Не питај више за проверу Сигурносне Фразе Сефа", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Бесплатно", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Потребно ако Entity ID није УРЛ." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Опциона подешавања" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип имена" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Пријава је покренута" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Потребно је одобрење уређаја. Изаберите опцију одобрења испод:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запамти овај уређај" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Недостаје имејл корисника" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Уређај поуздан" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index b689e0b33c6..fa98bbe6d5f 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index d164f9af8b5..16ee1126c0e 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "\"Logga in med enhet\" måste ställas in i inställningarna i Bitwardens app. Behöver du ett annat alternativ?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Logga in med huvudlösenord" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "En avisering har skickats till din enhet." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Visa alla inloggningsalternativ" + }, "viewAllLoginOptions": { "message": "Visa alla inloggningsalternativ" }, @@ -4443,6 +4455,9 @@ "message": "Fråga aldrig om att verifiera fingeravtrycksfraser för inbjudna användare (rekommenderas inte)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Gratis", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Värde måste vara mellan $MIN$ och $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Använd minst $RECOMMENDED$ tecken för att generera ett starkt lösenord.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Använd minst $RECOMMENDED$ ord för att generera en stark lösenfras.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Användarnamnstyp" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Inloggning påbörjad" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Kom ihåg denna enhet" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 97202b069db..24d2cfb901e 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Log in with master password" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index e5795991e11..bb0351a930d 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "เข้าสู่ระบบด้วยรหัสผ่านหลัก" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Version $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Free", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index 1c1a964cdee..d8741205c18 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Cihazla girişi Bitwarden mobil uygulamasının ayarlarından etkinleştirmelisiniz. Başka bir seçeneğe mi ihtiyacınız var?" }, + "needAnotherOptionV1": { + "message": "Başka bir seçeneğe mi ihtiyacınız var?" + }, "loginWithMasterPassword": { "message": "Ana parola ile giriş yap" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Cihazınıza bir bildirim gönderildi." }, + "aNotificationWasSentToYourDevice": { + "message": "Cihazınıza bir bildirim gönderildi" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Lütfen hesabınızın kilidinin açık olduğundan ve parmak izi ifadesinin diğer cihazla eşleştiğinden emin olun" + }, "versionNumber": { "message": "Sürüm $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Tüm giriş seçeneklerini gör" + }, "viewAllLoginOptions": { "message": "Tüm giriş seçeneklerini gör" }, @@ -4443,6 +4455,9 @@ "message": "Davet edilen kullanıcıların parmak izi ifedelerini doğrulamalarını isteme (önerilmez)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "İsteğiniz onaylanınca size haber vereceğiz" + }, "free": { "message": "Ücretsiz", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Varlık Kimliği bir URL değilse gereklidir." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "İsteğe bağlı özelleştirmeler" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Değer $MIN$ ile $MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Kullanıcı adı türü" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Giriş başlatıldı" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Cihaz onayı gerekiyor. Lütfen onay yönteminizi seçin:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Bu cihazı hatırla" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Kullanıcının e-postası eksik" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Cihaza güvenildi" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Başarıyla silindi" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index 185b3cc4575..2a438a711d8 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Потрібно увімкнути схвалення запитів на вхід у налаштуваннях програми Bitwarden. Потрібен інший варіант?" }, + "needAnotherOptionV1": { + "message": "Потрібен інший варіант?" + }, "loginWithMasterPassword": { "message": "Увійти з головним паролем" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Сповіщення було надіслано на ваш пристрій." }, + "aNotificationWasSentToYourDevice": { + "message": "Сповіщення надіслано на ваш пристрій" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Переконайтеся, що ваш обліковий запис розблоковано і фраза відбитка на іншому пристрої збігається" + }, "versionNumber": { "message": "Версія $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "Переглянути всі варіанти входу" + }, "viewAllLoginOptions": { "message": "Переглянути всі варіанти входу" }, @@ -4443,6 +4455,9 @@ "message": "Ніколи не вимагати перевірки фрази відбитка у запрошених користувачів (не рекомендовано)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "Після схвалення запиту ви отримаєте сповіщення" + }, "free": { "message": "Безплатно", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Обов'язково, якщо ID об'єкта не є URL." }, + "offerNoLongerValid": { + "message": "Ця пропозиція застаріла. Зверніться до адміністраторів вашої організації для отримання додаткової інформації." + }, "openIdOptionalCustomizations": { "message": "Додаткові налаштування" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Генерувати е-пошту" }, - "generatorBoundariesHint": { - "message": "Значення має бути між $MIN$ та $MAX$", + "spinboxBoundariesHint": { + "message": "Значення має бути між $MIN$ та $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Використовуйте $RECOMMENDED$ або більше символів, щоб згенерувати надійний пароль.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Використовуйте $RECOMMENDED$ або більше слів, щоб згенерувати надійну парольну фразу.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Тип імені користувача" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Ініційовано вхід" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Необхідне підтвердження пристрою. Виберіть варіант підтвердження нижче:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Запам'ятати цей пристрій" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "Немає адреси електронної пошти" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Довірений пристрій" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Успішно видалено" + }, + "freeFamiliesSponsorship": { + "message": "Вилучити безплатне спонсорство сімейних тарифних планів Bitwarden" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Не дозволяти учасникам отримувати сімейний тарифний план через цю організацію." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 5d18271c62e..cccc634d9eb 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "Đăng nhập bằng thiết bị phải được thiết lập trong cài đặt của ứng dụng Bitwarden. Dùng cách khác?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "Đăng nhập bằng mật khẩu chính" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "Một thông báo đã được gửi đến thiết bị của bạn." }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "Phiên bản $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "View all log in options" }, @@ -4443,6 +4455,9 @@ "message": "Never prompt to verify fingerprint phrases for invited users (not recommended)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "Miễn phí", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "Required if Entity ID is not a URL." }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "Optional customizations" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "Username type" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "Login initiated" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "Remember this device" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "User email missing" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "Device trusted" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index 334952a607b..188c464314a 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "必须在 Bitwarden App 的设置中启用设备登录。需要其他登录选项吗?" }, + "needAnotherOptionV1": { + "message": "需要其他选项吗?" + }, "loginWithMasterPassword": { "message": "使用主密码登录" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "通知已发送到您的设备。" }, + "aNotificationWasSentToYourDevice": { + "message": "通知已发送到您的设备" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "确保您的账户已解锁,并且指纹短语与其他设备上的相匹配。" + }, "versionNumber": { "message": "版本: $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "查看所有登录选项" + }, "viewAllLoginOptions": { "message": "查看所有登录选项" }, @@ -4443,6 +4455,9 @@ "message": "不再提示验证受邀用户的指纹短语(不推荐)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "请求获得批准后,您将收到通知" + }, "free": { "message": "免费", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "如果实体 ID 不是一个 URL,则必填。" }, + "offerNoLongerValid": { + "message": "此优惠不再可用。请联系组织管理员获取更多信息。" + }, "openIdOptionalCustomizations": { "message": "个性化(可选)" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "生成电子邮件地址" }, - "generatorBoundariesHint": { - "message": "值必须在 $MIN$ 和 $MAX$ 之间", + "spinboxBoundariesHint": { + "message": "值必须在 $MIN$ 和 $MAX$ 之间。", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " 使用 $RECOMMENDED$ 或更多个字符生成强大的密码。", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " 使用 $RECOMMENDED$ 或更多个单词生成强大的密码短语。", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "用户名类型" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "登录已发起" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "需要设备批准。请在下面选择一个批准选项:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "记住此设备" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "缺少用户电子邮件" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "设备已信任" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "删除成功" + }, + "freeFamiliesSponsorship": { + "message": "删除免费的 Bitwarden 家庭赞助" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "不允许成员通过此组织兑换家庭计划。" + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index 4e4e70ac221..d1a83596a21 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -984,6 +984,9 @@ "loginWithDeviceEnabledNote": { "message": "必須先在 Bitwarden 應用程式設定中開啟後,才可以使用裝置登入。要改用其他選項嗎?" }, + "needAnotherOptionV1": { + "message": "Need another option?" + }, "loginWithMasterPassword": { "message": "使用主密碼登入" }, @@ -1302,6 +1305,12 @@ "notificationSentDevice": { "message": "通知已傳送至您的裝置。" }, + "aNotificationWasSentToYourDevice": { + "message": "A notification was sent to your device" + }, + "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { + "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + }, "versionNumber": { "message": "版本 $VERSION_NUMBER$", "placeholders": { @@ -3387,6 +3396,9 @@ } } }, + "viewAllLogInOptions": { + "message": "View all log in options" + }, "viewAllLoginOptions": { "message": "檢視所有登入選項" }, @@ -4443,6 +4455,9 @@ "message": "不再提示驗證已邀請使用者的指紋短語(不推薦)", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "You will be notified once the request is approved" + }, "free": { "message": "免費", "description": "Free, as in 'Free beer'" @@ -6376,6 +6391,9 @@ "idpSingleSignOnServiceUrlRequired": { "message": "若 Entity ID 非 URL,則必須填入。" }, + "offerNoLongerValid": { + "message": "This offer is no longer valid. Contact your organization administrators for more information." + }, "openIdOptionalCustomizations": { "message": "自訂(選填)" }, @@ -6468,8 +6486,8 @@ "generateEmail": { "message": "Generate email" }, - "generatorBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$", + "spinboxBoundariesHint": { + "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6482,6 +6500,26 @@ } } }, + "passwordLengthRecommendationHint": { + "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, "usernameType": { "message": "使用者名稱類型" }, @@ -8013,9 +8051,18 @@ "loginInitiated": { "message": "登入已啟動" }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "Remember this device to make future logins seamless" + }, "deviceApprovalRequired": { "message": "裝置需要取得核准。請在下面選擇一個核准選項:" }, + "deviceApprovalRequiredV2": { + "message": "Device approval required" + }, + "selectAnApprovalOptionBelow": { + "message": "Select an approval option below" + }, "rememberThisDevice": { "message": "記住這個裝置" }, @@ -8245,6 +8292,9 @@ "userEmailMissing": { "message": "缺少使用者電子郵件地址" }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "Active user email not found. Logging you out." + }, "deviceTrusted": { "message": "裝置已信任" }, @@ -9707,5 +9757,20 @@ }, "deletedSuccessfully": { "message": "Deleted successfully" + }, + "freeFamiliesSponsorship": { + "message": "Remove Free Bitwarden Families sponsorship" + }, + "freeFamiliesSponsorshipPolicyDesc": { + "message": "Do not allow members to redeem a Families plan through this organization." + }, + "verifyBankAccountWithStatementDescriptorWarning": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStatementDescriptorInstructions": { + "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "descriptorCode": { + "message": "Descriptor code" } } diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts index 987888741a4..9c0bae10526 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts @@ -14,6 +14,8 @@ import { import { OrgDomainApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization-domain/org-domain-api.service.abstraction"; import { OrgDomainServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization-domain/org-domain.service.abstraction"; import { OrganizationDomainResponse } from "@bitwarden/common/admin-console/abstractions/organization-domain/responses/organization-domain.response"; +import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; +import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { HttpStatusCode } from "@bitwarden/common/enums"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; @@ -33,6 +35,7 @@ import { }) export class DomainVerificationComponent implements OnInit, OnDestroy { private componentDestroyed$ = new Subject(); + private singleOrgPolicyEnabled = false; loading = true; @@ -48,6 +51,7 @@ export class DomainVerificationComponent implements OnInit, OnDestroy { private validationService: ValidationService, private toastService: ToastService, private configService: ConfigService, + private policyApiService: PolicyApiServiceAbstraction, ) {} // eslint-disable-next-line @typescript-eslint/no-empty-function @@ -71,6 +75,14 @@ export class DomainVerificationComponent implements OnInit, OnDestroy { async load() { await this.orgDomainApiService.getAllByOrgId(this.organizationId); + if (await this.configService.getFeatureFlag(FeatureFlag.AccountDeprovisioning)) { + const singleOrgPolicy = await this.policyApiService.getPolicy( + this.organizationId, + PolicyType.SingleOrg, + ); + this.singleOrgPolicyEnabled = singleOrgPolicy?.enabled ?? false; + } + this.loading = false; } @@ -87,6 +99,7 @@ export class DomainVerificationComponent implements OnInit, OnDestroy { map(async ([accountDeprovisioningEnabled, organizationDomains]) => { if ( accountDeprovisioningEnabled && + !this.singleOrgPolicyEnabled && organizationDomains.every((domain) => domain.verifiedDate === null) ) { await this.dialogService.openSimpleDialog({ diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts index 8e5860833c5..3a76b92cede 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts @@ -76,6 +76,13 @@ const routes: Routes = [ }, ], }, + { + path: "access-intelligence", + loadChildren: () => + import("../../tools/access-intelligence/access-intelligence.module").then( + (m) => m.AccessIntelligenceModule, + ), + }, ], }, ]; diff --git a/apps/web/src/app/tools/access-intelligence/access-intelligence-routing.module.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence-routing.module.ts similarity index 100% rename from apps/web/src/app/tools/access-intelligence/access-intelligence-routing.module.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence-routing.module.ts diff --git a/apps/web/src/app/tools/access-intelligence/access-intelligence.module.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence.module.ts similarity index 100% rename from apps/web/src/app/tools/access-intelligence/access-intelligence.module.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence.module.ts diff --git a/apps/web/src/app/tools/access-intelligence/all-applications.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html similarity index 100% rename from apps/web/src/app/tools/access-intelligence/all-applications.component.html rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html diff --git a/apps/web/src/app/tools/access-intelligence/all-applications.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.ts similarity index 94% rename from apps/web/src/app/tools/access-intelligence/all-applications.component.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.ts index 5d76403f46b..c755aa72598 100644 --- a/apps/web/src/app/tools/access-intelligence/all-applications.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.ts @@ -21,10 +21,9 @@ import { ToastService, } from "@bitwarden/components"; import { CardComponent } from "@bitwarden/tools-card"; - -import { HeaderModule } from "../../layouts/header/header.module"; -import { SharedModule } from "../../shared"; -import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.module"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; import { applicationTableMockData } from "./application-table.mock"; diff --git a/apps/web/src/app/tools/access-intelligence/application-table.mock.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/application-table.mock.ts similarity index 100% rename from apps/web/src/app/tools/access-intelligence/application-table.mock.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/application-table.mock.ts diff --git a/apps/web/src/app/tools/access-intelligence/critical-applications.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html similarity index 100% rename from apps/web/src/app/tools/access-intelligence/critical-applications.component.html rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html diff --git a/apps/web/src/app/tools/access-intelligence/critical-applications.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts similarity index 90% rename from apps/web/src/app/tools/access-intelligence/critical-applications.component.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts index 0779b2977e5..43ff3d458bc 100644 --- a/apps/web/src/app/tools/access-intelligence/critical-applications.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts @@ -7,10 +7,9 @@ import { debounceTime, map } from "rxjs"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { SearchModule, TableDataSource, NoItemsModule, Icons } from "@bitwarden/components"; import { CardComponent } from "@bitwarden/tools-card"; - -import { HeaderModule } from "../../layouts/header/header.module"; -import { SharedModule } from "../../shared"; -import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.module"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; import { applicationTableMockData } from "./application-table.mock"; import { RiskInsightsTabType } from "./risk-insights.component"; diff --git a/apps/web/src/app/tools/access-intelligence/notified-members-table.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/notified-members-table.component.html similarity index 100% rename from apps/web/src/app/tools/access-intelligence/notified-members-table.component.html rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/notified-members-table.component.html diff --git a/apps/web/src/app/tools/access-intelligence/notified-members-table.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/notified-members-table.component.ts similarity index 100% rename from apps/web/src/app/tools/access-intelligence/notified-members-table.component.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/notified-members-table.component.ts diff --git a/apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.html similarity index 100% rename from apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.html rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.html diff --git a/apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.spec.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.spec.ts similarity index 93% rename from apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.spec.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.spec.ts index e3011604a45..1e9e4171bc3 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.spec.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.spec.ts @@ -3,7 +3,6 @@ import { ActivatedRoute, convertToParamMap } from "@angular/router"; import { mock, MockProxy } from "jest-mock-extended"; import { of } from "rxjs"; -// eslint-disable-next-line no-restricted-imports import { MemberCipherDetailsApiService, PasswordHealthService, @@ -15,9 +14,8 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { TableModule } from "@bitwarden/components"; - -import { LooseComponentsModule } from "../../shared"; -import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { LooseComponentsModule } from "@bitwarden/web-vault/app/shared"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; import { PasswordHealthMembersURIComponent } from "./password-health-members-uri.component"; diff --git a/apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.ts similarity index 92% rename from apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.ts index c8aea97ef77..ffc9a7911e5 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health-members-uri.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members-uri.component.ts @@ -5,7 +5,6 @@ import { ActivatedRoute } from "@angular/router"; import { map } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; -// eslint-disable-next-line no-restricted-imports import { MemberCipherDetailsApiService, PasswordHealthService, @@ -24,11 +23,8 @@ import { TableDataSource, TableModule, } from "@bitwarden/components"; - -// eslint-disable-next-line no-restricted-imports -import { HeaderModule } from "../../layouts/header/header.module"; -// eslint-disable-next-line no-restricted-imports -import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.module"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; @Component({ standalone: true, diff --git a/apps/web/src/app/tools/access-intelligence/password-health-members.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.html similarity index 100% rename from apps/web/src/app/tools/access-intelligence/password-health-members.component.html rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.html diff --git a/apps/web/src/app/tools/access-intelligence/password-health-members.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.ts similarity index 92% rename from apps/web/src/app/tools/access-intelligence/password-health-members.component.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.ts index 66ff348e9f9..19eded0de64 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health-members.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health-members.component.ts @@ -4,7 +4,6 @@ import { FormControl, FormsModule } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; import { debounceTime, map } from "rxjs"; -// eslint-disable-next-line no-restricted-imports import { MemberCipherDetailsApiService, PasswordHealthService, @@ -21,12 +20,9 @@ import { TableModule, ToastService, } from "@bitwarden/components"; - -import { HeaderModule } from "../../layouts/header/header.module"; -// eslint-disable-next-line no-restricted-imports -import { SharedModule } from "../../shared"; -// eslint-disable-next-line no-restricted-imports -import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.module"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; @Component({ standalone: true, diff --git a/apps/web/src/app/tools/access-intelligence/password-health.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.html similarity index 100% rename from apps/web/src/app/tools/access-intelligence/password-health.component.html rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.html diff --git a/apps/web/src/app/tools/access-intelligence/password-health.component.spec.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.spec.ts similarity index 93% rename from apps/web/src/app/tools/access-intelligence/password-health.component.spec.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.spec.ts index 5e934e3edfc..98637d0decb 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health.component.spec.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.spec.ts @@ -3,7 +3,6 @@ import { ActivatedRoute, convertToParamMap } from "@angular/router"; import { mock } from "jest-mock-extended"; import { of } from "rxjs"; -// eslint-disable-next-line no-restricted-imports import { MemberCipherDetailsApiService, PasswordHealthService, @@ -15,9 +14,8 @@ import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/pass import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { TableModule } from "@bitwarden/components"; import { TableBodyDirective } from "@bitwarden/components/src/table/table.component"; - -import { LooseComponentsModule } from "../../shared"; -import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { LooseComponentsModule } from "@bitwarden/web-vault/app/shared"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; import { PasswordHealthComponent } from "./password-health.component"; diff --git a/apps/web/src/app/tools/access-intelligence/password-health.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.ts similarity index 86% rename from apps/web/src/app/tools/access-intelligence/password-health.component.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.ts index 058cfb86dae..8ae14562f36 100644 --- a/apps/web/src/app/tools/access-intelligence/password-health.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/password-health.component.ts @@ -5,7 +5,6 @@ import { ActivatedRoute } from "@angular/router"; import { map } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; -// eslint-disable-next-line no-restricted-imports import { MemberCipherDetailsApiService, PasswordHealthService, @@ -22,13 +21,9 @@ import { TableDataSource, TableModule, } from "@bitwarden/components"; - -// eslint-disable-next-line no-restricted-imports -import { HeaderModule } from "../../layouts/header/header.module"; -// eslint-disable-next-line no-restricted-imports -import { OrganizationBadgeModule } from "../../vault/individual-vault/organization-badge/organization-badge.module"; -// eslint-disable-next-line no-restricted-imports -import { PipesModule } from "../../vault/individual-vault/pipes/pipes.module"; +import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.module"; +import { OrganizationBadgeModule } from "@bitwarden/web-vault/app/vault/individual-vault/organization-badge/organization-badge.module"; +import { PipesModule } from "@bitwarden/web-vault/app/vault/individual-vault/pipes/pipes.module"; @Component({ standalone: true, diff --git a/apps/web/src/app/tools/access-intelligence/risk-insights.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.html similarity index 95% rename from apps/web/src/app/tools/access-intelligence/risk-insights.component.html rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.html index 067207160d4..6df47e3c46f 100644 --- a/apps/web/src/app/tools/access-intelligence/risk-insights.component.html +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.html @@ -4,7 +4,7 @@

{{ "riskInsights" | i18n }}

{{ "reviewAtRiskPasswords" | i18n }}  {{ "learnMore" | i18n }}
-
+
{{ "dataLastUpdated" | i18n: (dataLastUpdated | date: "MMMM d, y 'at' h:mm a") diff --git a/apps/web/src/app/tools/access-intelligence/risk-insights.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.ts similarity index 96% rename from apps/web/src/app/tools/access-intelligence/risk-insights.component.ts rename to bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.ts index 1c6a36b4454..2308de28735 100644 --- a/apps/web/src/app/tools/access-intelligence/risk-insights.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.ts @@ -7,8 +7,7 @@ import { JslibModule } from "@bitwarden/angular/jslib.module"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { AsyncActionsModule, ButtonModule, TabsModule } from "@bitwarden/components"; - -import { HeaderModule } from "../../layouts/header/header.module"; +import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.module"; import { AllApplicationsComponent } from "./all-applications.component"; import { CriticalApplicationsComponent } from "./critical-applications.component"; diff --git a/libs/angular/src/auth/components/base-login-decryption-options.component.ts b/libs/angular/src/auth/components/base-login-decryption-options-v1.component.ts similarity index 99% rename from libs/angular/src/auth/components/base-login-decryption-options.component.ts rename to libs/angular/src/auth/components/base-login-decryption-options-v1.component.ts index f674a32af8b..df99503b6d7 100644 --- a/libs/angular/src/auth/components/base-login-decryption-options.component.ts +++ b/libs/angular/src/auth/components/base-login-decryption-options-v1.component.ts @@ -63,7 +63,7 @@ type ExistingUserUntrustedDeviceData = { type Data = NewUserData | ExistingUserUntrustedDeviceData; @Directive() -export class BaseLoginDecryptionOptionsComponent implements OnInit, OnDestroy { +export class BaseLoginDecryptionOptionsComponentV1 implements OnInit, OnDestroy { private destroy$ = new Subject(); protected State = State; diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.svg b/libs/angular/src/scss/bwicons/fonts/bwi-font.svg index 606f39e1168..c8535bebef8 100644 --- a/libs/angular/src/scss/bwicons/fonts/bwi-font.svg +++ b/libs/angular/src/scss/bwicons/fonts/bwi-font.svg @@ -119,7 +119,7 @@ - + diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf b/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf index 523c5233e03..9696152a498 100644 Binary files a/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf and b/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf differ diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff index 4eef2c86034..554375a1ce9 100644 Binary files a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff and b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff differ diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 index 7353bb99ef5..80544871f3a 100644 Binary files a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 and b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 differ diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 9d1cd6e502d..0208a3cdc7a 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -16,6 +16,8 @@ import { DefaultAnonLayoutWrapperDataService, LoginComponentService, DefaultLoginComponentService, + LoginDecryptionOptionsService, + DefaultLoginDecryptionOptionsService, } from "@bitwarden/auth/angular"; import { AuthRequestServiceAbstraction, @@ -1384,6 +1386,11 @@ const safeProviders: SafeProvider[] = [ useClass: DefaultAuthRequestApiService, deps: [ApiServiceAbstraction, LogService], }), + safeProvider({ + provide: LoginDecryptionOptionsService, + useClass: DefaultLoginDecryptionOptionsService, + deps: [MessagingServiceAbstraction], + }), ]; @NgModule({ diff --git a/libs/auth/src/angular/index.ts b/libs/auth/src/angular/index.ts index 5c028065c62..a01b8849c8d 100644 --- a/libs/auth/src/angular/index.ts +++ b/libs/auth/src/angular/index.ts @@ -24,6 +24,11 @@ export * from "./login/login-secondary-content.component"; export * from "./login/login-component.service"; export * from "./login/default-login-component.service"; +// login decryption options +export * from "./login-decryption-options/login-decryption-options.component"; +export * from "./login-decryption-options/login-decryption-options.service"; +export * from "./login-decryption-options/default-login-decryption-options.service"; + // login via auth request export * from "./login-via-auth-request/login-via-auth-request.component"; @@ -61,3 +66,7 @@ export * from "./vault-timeout-input/vault-timeout-input.component"; // self hosted environment configuration dialog export * from "./self-hosted-env-config-dialog/self-hosted-env-config-dialog.component"; + +// login approval +export * from "./login-approval/login-approval.component"; +export * from "./login-approval/default-login-approval-component.service"; diff --git a/libs/auth/src/angular/lock/lock.component.ts b/libs/auth/src/angular/lock/lock.component.ts index 94c226f3f67..d8a2853a046 100644 --- a/libs/auth/src/angular/lock/lock.component.ts +++ b/libs/auth/src/angular/lock/lock.component.ts @@ -228,6 +228,7 @@ export class LockV2Component implements OnInit, OnDestroy { this.unlockOptions = null; this.activeUnlockOption = null; this.formGroup = null; // new form group will be created based on new active unlock option + this.isInitialLockScreen = true; // Desktop properties: this.biometricAsked = false; diff --git a/libs/auth/src/angular/login-approval/default-login-approval-component.service.spec.ts b/libs/auth/src/angular/login-approval/default-login-approval-component.service.spec.ts new file mode 100644 index 00000000000..ec274fac8bc --- /dev/null +++ b/libs/auth/src/angular/login-approval/default-login-approval-component.service.spec.ts @@ -0,0 +1,25 @@ +import { TestBed } from "@angular/core/testing"; + +import { DefaultLoginApprovalComponentService } from "./default-login-approval-component.service"; +import { LoginApprovalComponent } from "./login-approval.component"; + +describe("DefaultLoginApprovalComponentService", () => { + let service: DefaultLoginApprovalComponentService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [DefaultLoginApprovalComponentService], + }); + + service = TestBed.inject(DefaultLoginApprovalComponentService); + }); + + it("is created successfully", () => { + expect(service).toBeTruthy(); + }); + + it("has showLoginRequestedAlertIfWindowNotVisible method that is a no-op", async () => { + const loginApprovalComponent = {} as LoginApprovalComponent; + await service.showLoginRequestedAlertIfWindowNotVisible(loginApprovalComponent.email); + }); +}); diff --git a/libs/auth/src/angular/login-approval/default-login-approval-component.service.ts b/libs/auth/src/angular/login-approval/default-login-approval-component.service.ts new file mode 100644 index 00000000000..8b0463be6c1 --- /dev/null +++ b/libs/auth/src/angular/login-approval/default-login-approval-component.service.ts @@ -0,0 +1,16 @@ +import { LoginApprovalComponentServiceAbstraction } from "../../common/abstractions/login-approval-component.service.abstraction"; + +/** + * Default implementation of the LoginApprovalComponentServiceAbstraction. + */ +export class DefaultLoginApprovalComponentService + implements LoginApprovalComponentServiceAbstraction +{ + /** + * No-op implementation of the showLoginRequestedAlertIfWindowNotVisible method. + * @returns + */ + async showLoginRequestedAlertIfWindowNotVisible(email?: string): Promise { + return; + } +} diff --git a/apps/desktop/src/auth/login/login-approval.component.html b/libs/auth/src/angular/login-approval/login-approval.component.html similarity index 93% rename from apps/desktop/src/auth/login/login-approval.component.html rename to libs/auth/src/angular/login-approval/login-approval.component.html index cc2c0536c9e..ddbc48d71a3 100644 --- a/apps/desktop/src/auth/login/login-approval.component.html +++ b/libs/auth/src/angular/login-approval/login-approval.component.html @@ -1,7 +1,7 @@ {{ "areYouTryingtoLogin" | i18n }} -

{{ "logInAttemptBy" | i18n: email }}

+

{{ "logInAttemptBy" | i18n: email }}

{{ "fingerprintPhraseHeader" | i18n }}

{{ fingerprintPhrase }}

diff --git a/libs/auth/src/angular/login-approval/login-approval.component.spec.ts b/libs/auth/src/angular/login-approval/login-approval.component.spec.ts new file mode 100644 index 00000000000..ff598bdeb91 --- /dev/null +++ b/libs/auth/src/angular/login-approval/login-approval.component.spec.ts @@ -0,0 +1,122 @@ +import { DialogRef, DIALOG_DATA } from "@angular/cdk/dialog"; +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { mock, MockProxy } from "jest-mock-extended"; +import { of } from "rxjs"; + +import { + AuthRequestServiceAbstraction, + LoginApprovalComponentServiceAbstraction, +} from "@bitwarden/auth/common"; +import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { AuthRequestResponse } from "@bitwarden/common/auth/models/response/auth-request.response"; +import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { UserId } from "@bitwarden/common/types/guid"; +import { ToastService } from "@bitwarden/components"; +import { KeyService } from "@bitwarden/key-management"; + +import { LoginApprovalComponent } from "./login-approval.component"; + +describe("LoginApprovalComponent", () => { + let component: LoginApprovalComponent; + let fixture: ComponentFixture; + + let authRequestService: MockProxy; + let accountService: MockProxy; + let apiService: MockProxy; + let i18nService: MockProxy; + let dialogRef: MockProxy; + let toastService: MockProxy; + + const testNotificationId = "test-notification-id"; + const testEmail = "test@bitwarden.com"; + const testPublicKey = "test-public-key"; + + beforeEach(async () => { + authRequestService = mock(); + accountService = mock(); + apiService = mock(); + i18nService = mock(); + dialogRef = mock(); + toastService = mock(); + + accountService.activeAccount$ = of({ + email: testEmail, + id: "test-user-id" as UserId, + emailVerified: true, + name: null, + }); + + await TestBed.configureTestingModule({ + imports: [LoginApprovalComponent], + providers: [ + { provide: DIALOG_DATA, useValue: { notificationId: testNotificationId } }, + { provide: AuthRequestServiceAbstraction, useValue: authRequestService }, + { provide: AccountService, useValue: accountService }, + { provide: PlatformUtilsService, useValue: mock() }, + { provide: I18nService, useValue: i18nService }, + { provide: ApiService, useValue: apiService }, + { provide: AppIdService, useValue: mock() }, + { provide: KeyService, useValue: mock() }, + { provide: DialogRef, useValue: dialogRef }, + { provide: ToastService, useValue: toastService }, + { + provide: LoginApprovalComponentServiceAbstraction, + useValue: mock(), + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(LoginApprovalComponent); + component = fixture.componentInstance; + }); + + it("creates successfully", () => { + expect(component).toBeTruthy(); + }); + + describe("ngOnInit", () => { + beforeEach(() => { + apiService.getAuthRequest.mockResolvedValue({ + publicKey: testPublicKey, + creationDate: new Date().toISOString(), + } as AuthRequestResponse); + authRequestService.getFingerprintPhrase.mockResolvedValue("test-phrase"); + }); + + it("retrieves and sets auth request data", async () => { + await component.ngOnInit(); + + expect(apiService.getAuthRequest).toHaveBeenCalledWith(testNotificationId); + expect(component.email).toBe(testEmail); + expect(component.fingerprintPhrase).toBeDefined(); + }); + + it("updates time text initially", async () => { + i18nService.t.mockReturnValue("justNow"); + + await component.ngOnInit(); + expect(component.requestTimeText).toBe("justNow"); + }); + }); + + describe("denyLogin", () => { + it("denies auth request and shows info toast", async () => { + const response = { requestApproved: false } as AuthRequestResponse; + apiService.getAuthRequest.mockResolvedValue(response); + authRequestService.approveOrDenyAuthRequest.mockResolvedValue(response); + i18nService.t.mockReturnValue("denied message"); + + await component.denyLogin(); + + expect(authRequestService.approveOrDenyAuthRequest).toHaveBeenCalledWith(false, response); + expect(toastService.showToast).toHaveBeenCalledWith({ + variant: "info", + title: null, + message: "denied message", + }); + }); + }); +}); diff --git a/apps/desktop/src/auth/login/login-approval.component.ts b/libs/auth/src/angular/login-approval/login-approval.component.ts similarity index 94% rename from apps/desktop/src/auth/login/login-approval.component.ts rename to libs/auth/src/angular/login-approval/login-approval.component.ts index e6428e0020c..9dff4d3e27a 100644 --- a/apps/desktop/src/auth/login/login-approval.component.ts +++ b/libs/auth/src/angular/login-approval/login-approval.component.ts @@ -4,7 +4,10 @@ import { Component, OnInit, OnDestroy, Inject } from "@angular/core"; import { Subject, firstValueFrom, map } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; -import { AuthRequestServiceAbstraction } from "@bitwarden/auth/common"; +import { + AuthRequestServiceAbstraction, + LoginApprovalComponentServiceAbstraction as LoginApprovalComponentService, +} from "@bitwarden/auth/common"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthRequestResponse } from "@bitwarden/common/auth/models/response/auth-request.response"; @@ -56,6 +59,7 @@ export class LoginApprovalComponent implements OnInit, OnDestroy { protected keyService: KeyService, private dialogRef: DialogRef, private toastService: ToastService, + private loginApprovalComponentService: LoginApprovalComponentService, ) { this.notificationId = params.notificationId; } @@ -89,14 +93,7 @@ export class LoginApprovalComponent implements OnInit, OnDestroy { this.updateTimeText(); }, RequestTimeUpdate); - const isVisible = await ipc.platform.isWindowVisible(); - if (!isVisible) { - await ipc.auth.loginRequest( - this.i18nService.t("logInRequested"), - this.i18nService.t("confirmLoginAtemptForMail", this.email), - this.i18nService.t("close"), - ); - } + this.loginApprovalComponentService.showLoginRequestedAlertIfWindowNotVisible(this.email); } } diff --git a/libs/auth/src/angular/login-decryption-options/default-login-decryption-options.service.spec.ts b/libs/auth/src/angular/login-decryption-options/default-login-decryption-options.service.spec.ts new file mode 100644 index 00000000000..735b7667540 --- /dev/null +++ b/libs/auth/src/angular/login-decryption-options/default-login-decryption-options.service.spec.ts @@ -0,0 +1,37 @@ +import { MockProxy, mock } from "jest-mock-extended"; + +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; + +import { DefaultLoginDecryptionOptionsService } from "./default-login-decryption-options.service"; + +describe("DefaultLoginDecryptionOptionsService", () => { + let service: DefaultLoginDecryptionOptionsService; + + let messagingService: MockProxy; + + beforeEach(() => { + messagingService = mock(); + + service = new DefaultLoginDecryptionOptionsService(messagingService); + }); + + it("should instantiate the service", () => { + expect(service).not.toBeFalsy(); + }); + + describe("handleCreateUserSuccess()", () => { + it("should return null", async () => { + const result = await service.handleCreateUserSuccess(); + + expect(result).toBeNull(); + }); + }); + + describe("logOut()", () => { + it("should send a logout message", async () => { + await service.logOut(); + + expect(messagingService.send).toHaveBeenCalledWith("logout"); + }); + }); +}); diff --git a/libs/auth/src/angular/login-decryption-options/default-login-decryption-options.service.ts b/libs/auth/src/angular/login-decryption-options/default-login-decryption-options.service.ts new file mode 100644 index 00000000000..17ea0bc9653 --- /dev/null +++ b/libs/auth/src/angular/login-decryption-options/default-login-decryption-options.service.ts @@ -0,0 +1,15 @@ +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; + +import { LoginDecryptionOptionsService } from "./login-decryption-options.service"; + +export class DefaultLoginDecryptionOptionsService implements LoginDecryptionOptionsService { + constructor(protected messagingService: MessagingService) {} + + handleCreateUserSuccess(): Promise { + return null; + } + + async logOut(): Promise { + this.messagingService.send("logout"); + } +} diff --git a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.html b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.html new file mode 100644 index 00000000000..cb340f646f1 --- /dev/null +++ b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.html @@ -0,0 +1,60 @@ + +
+ + {{ "loading" | i18n }} +
+
+ + + + + {{ "rememberThisDevice" | i18n }} + {{ "uncheckIfPublicDevice" | i18n }} + + + + + + + + +
+ + + +
+ {{ "or" | i18n }} +
+
+ + + + +
+
diff --git a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.ts b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.ts new file mode 100644 index 00000000000..38771f9dada --- /dev/null +++ b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.ts @@ -0,0 +1,299 @@ +import { CommonModule } from "@angular/common"; +import { Component, DestroyRef, OnInit } from "@angular/core"; +import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; +import { FormBuilder, FormControl, ReactiveFormsModule } from "@angular/forms"; +import { Router } from "@angular/router"; +import { catchError, defer, firstValueFrom, from, map, of, switchMap, throwError } from "rxjs"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { + LoginEmailServiceAbstraction, + UserDecryptionOptions, + UserDecryptionOptionsServiceAbstraction, +} from "@bitwarden/auth/common"; +import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; +import { PasswordResetEnrollmentServiceAbstraction } from "@bitwarden/common/auth/abstractions/password-reset-enrollment.service.abstraction"; +import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/sso-login.service.abstraction"; +import { ClientType } from "@bitwarden/common/enums"; +import { KeysRequest } from "@bitwarden/common/models/request/keys.request"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; +import { UserId } from "@bitwarden/common/types/guid"; +import { + AsyncActionsModule, + ButtonModule, + CheckboxModule, + FormFieldModule, + ToastService, + TypographyModule, +} from "@bitwarden/components"; +import { KeyService } from "@bitwarden/key-management"; + +import { AnonLayoutWrapperDataService } from "../anon-layout/anon-layout-wrapper-data.service"; + +import { LoginDecryptionOptionsService } from "./login-decryption-options.service"; + +enum State { + NewUser, + ExistingUserUntrustedDevice, +} + +@Component({ + standalone: true, + templateUrl: "./login-decryption-options.component.html", + imports: [ + AsyncActionsModule, + ButtonModule, + CheckboxModule, + CommonModule, + FormFieldModule, + JslibModule, + ReactiveFormsModule, + TypographyModule, + ], +}) +export class LoginDecryptionOptionsComponent implements OnInit { + private activeAccountId: UserId; + private clientType: ClientType; + private email: string; + + protected loading = false; + protected state: State; + protected State = State; + + protected formGroup = this.formBuilder.group({ + rememberDevice: [true], // Remember device means for the user to trust the device + }); + + private get rememberDeviceControl(): FormControl { + return this.formGroup.controls.rememberDevice; + } + + // New User Properties + private newUserOrgId: string; + + // Existing User Untrusted Device Properties + protected canApproveFromOtherDevice = false; + protected canRequestAdminApproval = false; + protected canApproveWithMasterPassword = false; + + constructor( + private accountService: AccountService, + private anonLayoutWrapperDataService: AnonLayoutWrapperDataService, + private apiService: ApiService, + private destroyRef: DestroyRef, + private deviceTrustService: DeviceTrustServiceAbstraction, + private formBuilder: FormBuilder, + private i18nService: I18nService, + private keyService: KeyService, + private loginDecryptionOptionsService: LoginDecryptionOptionsService, + private loginEmailService: LoginEmailServiceAbstraction, + private messagingService: MessagingService, + private organizationApiService: OrganizationApiServiceAbstraction, + private passwordResetEnrollmentService: PasswordResetEnrollmentServiceAbstraction, + private platformUtilsService: PlatformUtilsService, + private router: Router, + private ssoLoginService: SsoLoginServiceAbstraction, + private toastService: ToastService, + private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, + private validationService: ValidationService, + ) { + this.clientType === this.platformUtilsService.getClientType(); + } + + async ngOnInit() { + this.loading = true; + + this.activeAccountId = (await firstValueFrom(this.accountService.activeAccount$))?.id; + + this.email = await firstValueFrom( + this.accountService.activeAccount$.pipe(map((a) => a?.email)), + ); + + if (!this.email) { + await this.handleMissingEmail(); + return; + } + + this.observeAndPersistRememberDeviceValueChanges(); + await this.setRememberDeviceDefaultValueFromState(); + + try { + const userDecryptionOptions = await firstValueFrom( + this.userDecryptionOptionsService.userDecryptionOptions$, + ); + + if ( + !userDecryptionOptions?.trustedDeviceOption?.hasAdminApproval && + !userDecryptionOptions?.hasMasterPassword + ) { + /** + * We are dealing with a new account if both are true: + * - User does NOT have admin approval (i.e. has not enrolled in admin reset) + * - User does NOT have a master password + */ + await this.loadNewUserData(); + } else { + this.loadExistingUserUntrustedDeviceData(userDecryptionOptions); + } + } catch (err) { + this.validationService.showError(err); + } finally { + this.loading = false; + } + } + + private async handleMissingEmail() { + this.toastService.showToast({ + variant: "error", + title: null, + message: this.i18nService.t("activeUserEmailNotFoundLoggingYouOut"), + }); + + setTimeout(async () => { + // We can't simply redirect to `/login` because the user is authed and the unauthGuard + // will prevent navigation. We must logout the user first via messagingService, which + // redirects to `/`, which will be handled by the redirectGuard to navigate the user to `/login`. + // The timeout just gives the user a chance to see the error toast before process reload runs on logout. + await this.loginDecryptionOptionsService.logOut(); + }, 5000); + } + + private observeAndPersistRememberDeviceValueChanges() { + this.rememberDeviceControl.valueChanges + .pipe( + takeUntilDestroyed(this.destroyRef), + switchMap((value) => + defer(() => this.deviceTrustService.setShouldTrustDevice(this.activeAccountId, value)), + ), + ) + .subscribe(); + } + + private async setRememberDeviceDefaultValueFromState() { + const rememberDeviceFromState = await this.deviceTrustService.getShouldTrustDevice( + this.activeAccountId, + ); + + const rememberDevice = rememberDeviceFromState ?? true; + + this.rememberDeviceControl.setValue(rememberDevice); + } + + private async loadNewUserData() { + this.state = State.NewUser; + + this.anonLayoutWrapperDataService.setAnonLayoutWrapperData({ + pageTitle: { + key: "loggedInExclamation", + }, + pageSubtitle: { + key: "rememberThisDeviceToMakeFutureLoginsSeamless", + }, + }); + + const autoEnrollStatus$ = defer(() => + this.ssoLoginService.getActiveUserOrganizationSsoIdentifier(), + ).pipe( + switchMap((organizationIdentifier) => { + if (organizationIdentifier == undefined) { + return throwError(() => new Error(this.i18nService.t("ssoIdentifierRequired"))); + } + + return from(this.organizationApiService.getAutoEnrollStatus(organizationIdentifier)); + }), + catchError((err: unknown) => { + this.validationService.showError(err); + return of(undefined); + }), + ); + + const autoEnrollStatus = await firstValueFrom(autoEnrollStatus$); + + this.newUserOrgId = autoEnrollStatus.id; + } + + private loadExistingUserUntrustedDeviceData(userDecryptionOptions: UserDecryptionOptions) { + this.state = State.ExistingUserUntrustedDevice; + + this.anonLayoutWrapperDataService.setAnonLayoutWrapperData({ + pageTitle: { + key: "deviceApprovalRequiredV2", + }, + pageSubtitle: { + key: "selectAnApprovalOptionBelow", + }, + }); + + this.canApproveFromOtherDevice = + userDecryptionOptions?.trustedDeviceOption?.hasLoginApprovingDevice || false; + this.canRequestAdminApproval = + userDecryptionOptions?.trustedDeviceOption?.hasAdminApproval || false; + this.canApproveWithMasterPassword = userDecryptionOptions?.hasMasterPassword || false; + } + + protected createUser = async () => { + if (this.state !== State.NewUser) { + return; + } + + try { + const { publicKey, privateKey } = await this.keyService.initAccount(); + const keysRequest = new KeysRequest(publicKey, privateKey.encryptedString); + await this.apiService.postAccountKeys(keysRequest); + + this.toastService.showToast({ + variant: "success", + title: null, + message: this.i18nService.t("accountSuccessfullyCreated"), + }); + + await this.passwordResetEnrollmentService.enroll(this.newUserOrgId); + + if (this.formGroup.value.rememberDevice) { + await this.deviceTrustService.trustDevice(this.activeAccountId); + } + + await this.loginDecryptionOptionsService.handleCreateUserSuccess(); + + if (this.clientType === ClientType.Desktop) { + this.messagingService.send("redrawMenu"); + } + + await this.handleCreateUserSuccessNavigation(); + } catch (err) { + this.validationService.showError(err); + } + }; + + private async handleCreateUserSuccessNavigation() { + if (this.clientType === ClientType.Browser) { + await this.router.navigate(["/tabs/vault"]); + } else { + await this.router.navigate(["/vault"]); + } + } + + protected async approveFromOtherDevice() { + this.loginEmailService.setLoginEmail(this.email); + await this.router.navigate(["/login-with-device"]); + } + + protected async approveWithMasterPassword() { + await this.router.navigate(["/lock"], { + queryParams: { + from: "login-initiated", + }, + }); + } + + protected async requestAdminApproval() { + this.loginEmailService.setLoginEmail(this.email); + await this.router.navigate(["/admin-approval-requested"]); + } +} diff --git a/libs/auth/src/angular/login-decryption-options/login-decryption-options.service.ts b/libs/auth/src/angular/login-decryption-options/login-decryption-options.service.ts new file mode 100644 index 00000000000..d81d56d6393 --- /dev/null +++ b/libs/auth/src/angular/login-decryption-options/login-decryption-options.service.ts @@ -0,0 +1,10 @@ +export abstract class LoginDecryptionOptionsService { + /** + * Handles client-specific logic that runs after a user was successfully created + */ + abstract handleCreateUserSuccess(): Promise; + /** + * Logs the user out + */ + abstract logOut(): Promise; +} diff --git a/libs/auth/src/angular/login/login.component.html b/libs/auth/src/angular/login/login.component.html index 0629e70a6ac..efea2917527 100644 --- a/libs/auth/src/angular/login/login.component.html +++ b/libs/auth/src/angular/login/login.component.html @@ -97,14 +97,6 @@ {{ "getMasterPasswordHint" | i18n }} - - -
+ +
+ + + + + + + diff --git a/libs/importer/src/components/dialog/sshkey-password-prompt.component.ts b/libs/importer/src/components/dialog/sshkey-password-prompt.component.ts new file mode 100644 index 00000000000..527dfec6e85 --- /dev/null +++ b/libs/importer/src/components/dialog/sshkey-password-prompt.component.ts @@ -0,0 +1,46 @@ +import { DialogRef } from "@angular/cdk/dialog"; +import { CommonModule } from "@angular/common"; +import { Component } from "@angular/core"; +import { FormBuilder, ReactiveFormsModule, Validators } from "@angular/forms"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { + AsyncActionsModule, + ButtonModule, + DialogModule, + FormFieldModule, + IconButtonModule, +} from "@bitwarden/components"; + +@Component({ + templateUrl: "sshkey-password-prompt.component.html", + standalone: true, + imports: [ + CommonModule, + JslibModule, + DialogModule, + FormFieldModule, + AsyncActionsModule, + ButtonModule, + IconButtonModule, + ReactiveFormsModule, + ], +}) +export class SshKeyPasswordPromptComponent { + protected formGroup = this.formBuilder.group({ + sshKeyPassword: ["", Validators.required], + }); + + constructor( + public dialogRef: DialogRef, + protected formBuilder: FormBuilder, + ) {} + + submit = () => { + this.formGroup.markAsTouched(); + if (!this.formGroup.valid) { + return; + } + this.dialogRef.close(this.formGroup.value.sshKeyPassword); + }; +} diff --git a/libs/importer/src/components/import.component.ts b/libs/importer/src/components/import.component.ts index 1ffe2728b05..1ab300fc378 100644 --- a/libs/importer/src/components/import.component.ts +++ b/libs/importer/src/components/import.component.ts @@ -21,10 +21,7 @@ import { JslibModule } from "@bitwarden/angular/jslib.module"; import { safeProvider, SafeProvider } from "@bitwarden/angular/platform/utils/safe-provider"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { - canAccessImport, - OrganizationService, -} from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; @@ -226,7 +223,7 @@ export class ImportComponent implements OnInit, OnDestroy, AfterViewInit { this.setImportOptions(); await this.initializeOrganizations(); - if (this.organizationId && (await this.canAccessImportExport(this.organizationId))) { + if (this.organizationId && (await this.canAccessImport(this.organizationId))) { this.handleOrganizationImportInit(); } else { this.handleImportInit(); @@ -289,7 +286,7 @@ export class ImportComponent implements OnInit, OnDestroy, AfterViewInit { private async initializeOrganizations() { this.organizations$ = concat( this.organizationService.memberOrganizations$.pipe( - canAccessImport(this.i18nService), + map((orgs) => orgs.filter((org) => org.canAccessImport)), map((orgs) => orgs.sort(Utils.getSortFunction(this.i18nService, "name"))), ), ); @@ -375,7 +372,7 @@ export class ImportComponent implements OnInit, OnDestroy, AfterViewInit { importContents, this.organizationId, this.formGroup.controls.targetSelector.value, - (await this.canAccessImportExport(this.organizationId)) && this.isFromAC, + (await this.canAccessImport(this.organizationId)) && this.isFromAC, ); //No errors, display success message @@ -395,11 +392,11 @@ export class ImportComponent implements OnInit, OnDestroy, AfterViewInit { } } - private async canAccessImportExport(organizationId?: string): Promise { + private async canAccessImport(organizationId?: string): Promise { if (!organizationId) { return false; } - return (await this.organizationService.get(this.organizationId))?.canAccessImportExport; + return (await this.organizationService.get(this.organizationId))?.canAccessImport; } getFormatInstructionTitle() { diff --git a/libs/tools/generator/components/src/credential-generator-history-dialog.component.html b/libs/tools/generator/components/src/credential-generator-history-dialog.component.html new file mode 100644 index 00000000000..b07eb62ae98 --- /dev/null +++ b/libs/tools/generator/components/src/credential-generator-history-dialog.component.html @@ -0,0 +1,18 @@ + + {{ "generatorHistory" | i18n }} + + + + + + + + diff --git a/libs/tools/generator/components/src/credential-generator-history-dialog.component.ts b/libs/tools/generator/components/src/credential-generator-history-dialog.component.ts new file mode 100644 index 00000000000..af1221e9d46 --- /dev/null +++ b/libs/tools/generator/components/src/credential-generator-history-dialog.component.ts @@ -0,0 +1,66 @@ +import { CommonModule } from "@angular/common"; +import { Component } from "@angular/core"; +import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; +import { BehaviorSubject, distinctUntilChanged, firstValueFrom, map, switchMap } from "rxjs"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { UserId } from "@bitwarden/common/types/guid"; +import { ButtonModule, DialogModule, DialogService } from "@bitwarden/components"; +import { GeneratorHistoryService } from "@bitwarden/generator-history"; + +import { CredentialGeneratorHistoryComponent as CredentialGeneratorHistoryToolsComponent } from "./credential-generator-history.component"; +import { EmptyCredentialHistoryComponent } from "./empty-credential-history.component"; + +@Component({ + templateUrl: "credential-generator-history-dialog.component.html", + standalone: true, + imports: [ + ButtonModule, + CommonModule, + JslibModule, + DialogModule, + CredentialGeneratorHistoryToolsComponent, + EmptyCredentialHistoryComponent, + ], +}) +export class CredentialGeneratorHistoryDialogComponent { + protected readonly hasHistory$ = new BehaviorSubject(false); + protected readonly userId$ = new BehaviorSubject(null); + + constructor( + private accountService: AccountService, + private history: GeneratorHistoryService, + private dialogService: DialogService, + ) { + this.accountService.activeAccount$ + .pipe( + takeUntilDestroyed(), + map(({ id }) => id), + distinctUntilChanged(), + ) + .subscribe(this.userId$); + + this.userId$ + .pipe( + takeUntilDestroyed(), + switchMap((id) => id && this.history.credentials$(id)), + map((credentials) => credentials.length > 0), + ) + .subscribe(this.hasHistory$); + } + + clear = async () => { + const confirmed = await this.dialogService.openSimpleDialog({ + title: { key: "clearGeneratorHistoryTitle" }, + content: { key: "cleargGeneratorHistoryDescription" }, + type: "warning", + acceptButtonText: { key: "clearHistory" }, + cancelButtonText: { key: "cancel" }, + }); + + if (confirmed) { + await this.history.clear(await firstValueFrom(this.userId$)); + } + }; +} diff --git a/libs/tools/generator/components/src/forwarder-settings.component.html b/libs/tools/generator/components/src/forwarder-settings.component.html index 0e15c2e89ac..d610f53d59f 100644 --- a/libs/tools/generator/components/src/forwarder-settings.component.html +++ b/libs/tools/generator/components/src/forwarder-settings.component.html @@ -12,7 +12,7 @@ {{ "apiKey" | i18n }} - +