From 590053a96a3d9666d6ba9447d692d51c9f518762 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 May 2025 21:31:48 -0400 Subject: [PATCH 01/36] [deps]: Update sigstore/cosign-installer action to v3.8.2 (#14507) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-web.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 740e11429f0..78f57f8cbf2 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -291,7 +291,7 @@ jobs: - name: Install Cosign if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main' - uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0 + uses: sigstore/cosign-installer@3454372f43399081ed03b604cb2d021dabca52bb # v3.8.2 - name: Sign image with Cosign if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main' From 8cf48d77fc6d46c8f0d96eb8cd086acfdb6f4624 Mon Sep 17 00:00:00 2001 From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Date: Fri, 9 May 2025 10:58:48 +0200 Subject: [PATCH 02/36] Revert "[deps]: Update crowdin/github-action action to v2 (#12310)" (#14694) This reverts commit 9e467163db31d23134d88a390bd589c2575ba3fa. --- .github/workflows/build-browser.yml | 2 +- .github/workflows/build-desktop.yml | 2 +- .github/workflows/build-web.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-browser.yml b/.github/workflows/build-browser.yml index 7e60103ea6b..f7b8eeabefe 100644 --- a/.github/workflows/build-browser.yml +++ b/.github/workflows/build-browser.yml @@ -441,7 +441,7 @@ jobs: secrets: "crowdin-api-token" - name: Upload Sources - uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 + uses: crowdin/github-action@30849777a3cba6ee9a09e24e195272b8287a0a5b # v1.20.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 488896a1774..86dc74f7351 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -1435,7 +1435,7 @@ jobs: secrets: "crowdin-api-token" - name: Upload Sources - uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 + uses: crowdin/github-action@30849777a3cba6ee9a09e24e195272b8287a0a5b # v1.20.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 78f57f8cbf2..275b867390e 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -351,7 +351,7 @@ jobs: secrets: "crowdin-api-token" - name: Upload Sources - uses: crowdin/github-action@b8012bd5491b8aa8578b73ab5b5f5e7c94aaa6e2 # v2.7.0 + uses: crowdin/github-action@30849777a3cba6ee9a09e24e195272b8287a0a5b # v1.20.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} From 66c31bc8b4b11e8eb5ca04b3f781e496281e5d68 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 11:13:25 +0200 Subject: [PATCH 03/36] Autosync the updated translations (#14687) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/browser/src/_locales/ar/messages.json | 84 ++++---- apps/browser/src/_locales/az/messages.json | 84 ++++---- apps/browser/src/_locales/be/messages.json | 84 ++++---- apps/browser/src/_locales/bg/messages.json | 84 ++++---- apps/browser/src/_locales/bn/messages.json | 84 ++++---- apps/browser/src/_locales/bs/messages.json | 84 ++++---- apps/browser/src/_locales/ca/messages.json | 84 ++++---- apps/browser/src/_locales/cs/messages.json | 84 ++++---- apps/browser/src/_locales/cy/messages.json | 84 ++++---- apps/browser/src/_locales/da/messages.json | 84 ++++---- apps/browser/src/_locales/de/messages.json | 84 ++++---- apps/browser/src/_locales/el/messages.json | 84 ++++---- apps/browser/src/_locales/en_GB/messages.json | 84 ++++---- apps/browser/src/_locales/en_IN/messages.json | 84 ++++---- apps/browser/src/_locales/es/messages.json | 84 ++++---- apps/browser/src/_locales/et/messages.json | 84 ++++---- apps/browser/src/_locales/eu/messages.json | 84 ++++---- apps/browser/src/_locales/fa/messages.json | 84 ++++---- apps/browser/src/_locales/fi/messages.json | 84 ++++---- apps/browser/src/_locales/fil/messages.json | 84 ++++---- apps/browser/src/_locales/fr/messages.json | 84 ++++---- apps/browser/src/_locales/gl/messages.json | 84 ++++---- apps/browser/src/_locales/he/messages.json | 84 ++++---- apps/browser/src/_locales/hi/messages.json | 84 ++++---- apps/browser/src/_locales/hr/messages.json | 84 ++++---- apps/browser/src/_locales/hu/messages.json | 84 ++++---- apps/browser/src/_locales/id/messages.json | 184 +++++++++--------- apps/browser/src/_locales/it/messages.json | 84 ++++---- apps/browser/src/_locales/ja/messages.json | 84 ++++---- apps/browser/src/_locales/ka/messages.json | 84 ++++---- apps/browser/src/_locales/km/messages.json | 84 ++++---- apps/browser/src/_locales/kn/messages.json | 84 ++++---- apps/browser/src/_locales/ko/messages.json | 84 ++++---- apps/browser/src/_locales/lt/messages.json | 84 ++++---- apps/browser/src/_locales/lv/messages.json | 88 +++++---- apps/browser/src/_locales/ml/messages.json | 84 ++++---- apps/browser/src/_locales/mr/messages.json | 84 ++++---- apps/browser/src/_locales/my/messages.json | 84 ++++---- apps/browser/src/_locales/nb/messages.json | 84 ++++---- apps/browser/src/_locales/ne/messages.json | 84 ++++---- apps/browser/src/_locales/nl/messages.json | 84 ++++---- apps/browser/src/_locales/nn/messages.json | 84 ++++---- apps/browser/src/_locales/or/messages.json | 84 ++++---- apps/browser/src/_locales/pl/messages.json | 84 ++++---- apps/browser/src/_locales/pt_BR/messages.json | 84 ++++---- apps/browser/src/_locales/pt_PT/messages.json | 84 ++++---- apps/browser/src/_locales/ro/messages.json | 84 ++++---- apps/browser/src/_locales/ru/messages.json | 84 ++++---- apps/browser/src/_locales/si/messages.json | 84 ++++---- apps/browser/src/_locales/sk/messages.json | 84 ++++---- apps/browser/src/_locales/sl/messages.json | 84 ++++---- apps/browser/src/_locales/sr/messages.json | 84 ++++---- apps/browser/src/_locales/sv/messages.json | 84 ++++---- apps/browser/src/_locales/te/messages.json | 84 ++++---- apps/browser/src/_locales/th/messages.json | 84 ++++---- apps/browser/src/_locales/tr/messages.json | 88 +++++---- apps/browser/src/_locales/uk/messages.json | 136 ++++++------- apps/browser/src/_locales/vi/messages.json | 84 ++++---- apps/browser/src/_locales/zh_CN/messages.json | 84 ++++---- apps/browser/src/_locales/zh_TW/messages.json | 84 ++++---- 60 files changed, 2720 insertions(+), 2480 deletions(-) diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index a65a7676141..cfea18c24d2 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index be97dff2f1a..20b7ae11103 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Bu qoşmanı birdəfəlik silmək istədiyinizə əminsiniz?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Vacib bildiriş" - }, - "setupTwoStepLogin": { - "message": "İki addımlı girişi qur" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden, 2025-ci ilin Fevral ayından etibarən yeni cihazlardan gələn girişləri doğrulamaq üçün hesabınızın e-poçtuna bir kod göndərəcək." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Hesabınızı qorumaq üçün alternativ bir yol kimi iki addımlı girişi qura və ya e-poçtunuzu müraciət edə biləcəyiniz e-poçtla dəyişdirə bilərsiniz." - }, - "remindMeLater": { - "message": "Daha sonra xatırlat" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "$EMAIL$ e-poçtunuza güvənli şəkildə müraciət edə bilirsiniz?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Xeyr, edə bilmirəm" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Bəli, e-poçtuma güvənli şəkildə müraciət edə bilirəm" - }, - "turnOnTwoStepLogin": { - "message": "İki addımlı girişi işə sal" - }, - "changeAcctEmail": { - "message": "Hesabın e-poçtunu dəyişdir" - }, "extensionWidth": { "message": "Uzantı eni" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Avto-doldurma ilə vaxta qənaət edin" }, - "newLoginNudgeBody": { - "message": "Bir veb sayt daxil edin ki, bu giriş məlumatları avto-doldurma təklifi kimi görünsün." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Problemsiz onlayn ödəniş" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Gəlişdirici dostu SSH müraciəti" }, - "newSshNudgeBody": { - "message": "Açarlarınızı saxlayın və sürətli, şifrələnmiş kimlik doğrulama üçün SSH agentinə bağlayın." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 3fb918806d0..cfe2f54b6a7 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 2d12dfcc7c8..cd6ff6dbbc8 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Сваляне на Битуорден" + }, + "downloadBitwardenOnAllDevices": { + "message": "Сваляне на Битуорден на всички устройства" + }, + "getTheMobileApp": { + "message": "Свалете мобилното приложение" + }, + "getTheMobileAppDesc": { + "message": "Разполагайте с паролите си дори когато сте в движение, с мобилното приложение на Битуорден." + }, + "getTheDesktopApp": { + "message": "Свалете настолното приложение" + }, + "getTheDesktopAppDesc": { + "message": "Използвайте трезора си без браузър. Можете да настроите отключване с биометрични данни, за да ускорите отключването както в настолното приложение, така и в добавката за браузъра." + }, + "downloadFromBitwardenNow": { + "message": "Свалете от bitwarden.com сега" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Наистина ли искате да изтриете завинаги този прикачен файл?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Бета" }, - "importantNotice": { - "message": "Важно съобщение" - }, - "setupTwoStepLogin": { - "message": "Настройте двустепенно удостоверяване" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Битуорден ще изпрати код до е-пощата Ви, за потвърждаване на вписването от нови устройства. Това ще започне от февруари 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Можете да настроите двустепенно удостоверяване, като различен метод на защита, или ако е необходимо да промените е-пощата си с такава, до която имате достъп." - }, - "remindMeLater": { - "message": "Напомнете ми по-късно" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Имате ли сигурен достъп до е-пощата си – $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Не, нямам" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, имам достъп до е-пощата си" - }, - "turnOnTwoStepLogin": { - "message": "Включване на двустепенното удостоверяване" - }, - "changeAcctEmail": { - "message": "Промяна на е-пощата" - }, "extensionWidth": { "message": "Ширина на разширението" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Спестете време с автоматично попълване" }, - "newLoginNudgeBody": { - "message": "Добавете уеб сайт, за да може тези данни за вписване да се появяват като предложение за автоматично попълване." + "newLoginNudgeBodyOne": { + "message": "Добавете", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "уеб сайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": ", за да може тези данни за вписване да се появяват като предложение за автоматично попълване.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Безпроблемни плащания" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Улеснен достъп за разработчици чрез SSH" }, - "newSshNudgeBody": { - "message": "Съхранявайте ключове и използвайте връзка чрез SSH агента, за бързо и шифровано удостоверяване." + "newSshNudgeBodyOne": { + "message": "Съхранявайте ключове и използвайте връзка чрез SSH агента, за бързо и шифровано удостоверяване.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Научете повече относно SSH-агента", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index 32d67524146..5ec63e71809 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 60dab160c69..66f8e5db4ae 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index e17280bd74d..840304621ea 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Esteu segur que voleu suprimir definitivament aquest adjunt?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Noticia important" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Recorda-m'ho més tard" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, jo no" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Activa l'inici de sessió en dos passos" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Amplada d'extensió" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index a44e12d3ebf..51c592b00b0 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Stáhnout Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Stáhnout Bitwarden na všech zařízeních" + }, + "getTheMobileApp": { + "message": "Získejte mobilní aplikaci" + }, + "getTheMobileAppDesc": { + "message": "Přistupujte k Vašim heslům pomocí mobilní aplikace Bitwarden." + }, + "getTheDesktopApp": { + "message": "Získejte desktopovou aplikaci" + }, + "getTheDesktopAppDesc": { + "message": "Přistupujte k Vašemu trezoru bez prohlížeče a poté nastavte odemknutí s biometrikou jak v desktopové aplikaci, tak v rozšíření prohlížeče." + }, + "downloadFromBitwardenNow": { + "message": "Stáhnout z bitwarden.com nyní" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Opravdu chcete tuto přílohu navždy smazat?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Důležité upozornění" - }, - "setupTwoStepLogin": { - "message": "Nastavit dvoufázové přihlášení" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden odešle kód na e-mail Vašeho účtu pro ověření přihlášení z nových zařízení počínaje únorem 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Dvoufázové přihlášení můžete nastavit jako alternativní způsob ochrany Vašeho účtu nebo změnit svůj e-mail na ten, k němuž můžete přistupovat." - }, - "remindMeLater": { - "message": "Připomenout později" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Máte spolehlivý přístup ke svému e-mailu $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ne, nemám" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ano, ke svému e-mailu mám přístup" - }, - "turnOnTwoStepLogin": { - "message": "Zapnout dvoufázové přihlášení" - }, - "changeAcctEmail": { - "message": "Změnit e-mail účtu" - }, "extensionWidth": { "message": "Šířka rozšíření" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Ušetřete čas s automatickým vyplňováním" }, - "newLoginNudgeBody": { - "message": "Zahrne webovou stránku, takže se toto přihlášení objeví jako návrh automatického vyplňování." + "newLoginNudgeBodyOne": { + "message": "Zahrne", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "webovou stránku, ", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "takže se toto přihlášení objeví jako návrh automatického vyplňování.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Bezproblémová online pokladna" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Přístup SSH pro vývojáře" }, - "newSshNudgeBody": { - "message": "Uložte své klíče a připojte se k SSH agentovi pro rychlé a šifrované ověření." + "newSshNudgeBodyOne": { + "message": "Uložte své klíče a připojte se k SSH agentovi pro rychlé a šifrované ověření.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Další informace o SSH agentovi", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index bda5ddd2a89..8c0b1d97f60 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "A oes gennych chi fynediad dibynadwy i'ch ebost, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nac oes" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Oes, mae gen i fynediad dibynadwy i fy ebost" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 5a61160bef9..3887e291334 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Sikker på, at denne vedhæftning skal slettes permanent?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Vigtig notits" - }, - "setupTwoStepLogin": { - "message": "Opsæt totrins-login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Startende i februar 2025, sender Bitwarden en kode til kontoe-mailadressen for at bekræfte logins fra nye enheder." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Man kan opsætte totrins-login som en alternativ måde at beskytte sin konto på eller ændre sin e-mail til en, man kan tilgå." - }, - "remindMeLater": { - "message": "Påmind senere" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Er der pålidelig adgang til e-mailadressen, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nej, jeg gør ikke" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, e-mailadressen kan pålideligt tilgås" - }, - "turnOnTwoStepLogin": { - "message": "Slå totrins-login til" - }, - "changeAcctEmail": { - "message": "Skift kontoe-mailadresse" - }, "extensionWidth": { "message": "Udvidelsesbredde" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index b4d0f3b82c7..747dba5497c 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Bitwarden herunterladen" + }, + "downloadBitwardenOnAllDevices": { + "message": "Bitwarden auf allen Geräten herunterladen" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Bist du sicher, dass du diesen Anhang dauerhaft löschen möchtest?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Wichtiger Hinweis" - }, - "setupTwoStepLogin": { - "message": "Zwei-Faktor-Authentifizierung einrichten" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Ab Februar 2025 wird Bitwarden einen Code an deine Konto-E-Mail-Adresse senden, um Anmeldungen von neuen Geräten zu verifizieren." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Du kannst die Zwei-Faktor-Authentifizierung als eine alternative Methode einrichten, um dein Konto zu schützen, oder deine E-Mail-Adresse zu einer anderen ändern, auf die du zugreifen kannst." - }, - "remindMeLater": { - "message": "Erinnere mich später" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Hast du zuverlässigen Zugriff auf deine E-Mail-Adresse $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nein, habe ich nicht" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, ich kann zuverlässig auf meine E-Mails zugreifen" - }, - "turnOnTwoStepLogin": { - "message": "Zwei-Faktor-Authentifizierung aktivieren" - }, - "changeAcctEmail": { - "message": "E-Mail-Adresse des Kontos ändern" - }, "extensionWidth": { "message": "Breite der Erweiterung" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" }, - "newLoginNudgeBody": { - "message": "Füge eine Website hinzu, damit diese Zugangsdaten als Auto-Ausfüllen-Vorschlag erscheinen." + "newLoginNudgeBodyOne": { + "message": "Füge eine", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "hinzu, damit diese Zugangsdaten als Auto-Ausfüllen-Vorschlag erscheinen.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Nahtlose Online-Kaufabwicklung" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Entwickler-freundlicher SSH-Zugriff" }, - "newSshNudgeBody": { - "message": "Speicher deine Schlüssel und verbinden dich mit dem SSH-Agenten für eine schnelle und verschlüsselte Authentifizierung." + "newSshNudgeBodyOne": { + "message": "Speicher deine Schlüssel und verbinden dich mit dem SSH-Agenten für eine schnelle und verschlüsselte Authentifizierung.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Erfahre mehr über den SSH-Agenten", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 1bfc9d70f35..122af181349 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Είστε σίγουροι ότι θέλετε να διαγράψετε οριστικά αυτό το συνημμένο;" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta (Δοκιμαστική)" }, - "importantNotice": { - "message": "Σημαντική ειδοποίηση" - }, - "setupTwoStepLogin": { - "message": "Ρύθμιση σύνδεσης δύο βημάτων" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Το Bitwarden θα στείλει έναν κωδικό στο ηλ. ταχυδρομείο του λογαριασμού σας για να επαληθεύσει τις συνδέσεις από τις νέες συσκευές που ξεκινούν τον Φεβρουάριο του 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Μπορείτε να ορίσετε σύνδεση δύο βημάτων ως εναλλακτικό τρόπο προστασίας του λογαριασμού σας ή να αλλάξετε το ηλ. ταχυδρομείο σας σε ένα που μπορείτε να έχετε πρόσβαση." - }, - "remindMeLater": { - "message": "Υπενθύμιση αργότερα" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Έχετε αξιόπιστη πρόσβαση στο ηλ. ταχυδρομείο σας, $EMAIL$;", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Όχι, δεν έχω" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ναι, μπορώ να συνδεθώ αξιόπιστα στο ηλ. ταχυδρομείο μου" - }, - "turnOnTwoStepLogin": { - "message": "Ενεργοποίηση σύνδεσης δύο βημάτων" - }, - "changeAcctEmail": { - "message": "Αλλαγή ηλ. ταχυδρομείου λογαριασμού" - }, "extensionWidth": { "message": "Πλάτος εφαρμογής" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 4a7426d11ff..e91c653721c 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index 7500b67c56e..94c929c6999 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index d760a4632f3..2950f838c9c 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "¿Estás seguro de que deseas eliminar permanentemente este adjunto?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Recuérdame más tarde" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "¿Tienes acceso fiable a tu correo electrónico, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, no lo tengo" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sí, puedo acceder a mi correo electrónico de forma fiable" - }, - "turnOnTwoStepLogin": { - "message": "Activar inicio de sesión en dos pasos" - }, - "changeAcctEmail": { - "message": "Cambiar la cuenta de correo electrónico" - }, "extensionWidth": { "message": "Ancho de extensión" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 373fe80a441..5a51598a4f8 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index f4a53cadf25..73053b8597b 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 9bbba3a05d5..6f6ccecdd34 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 455b0638c6e..747ac8ccd57 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Haluatko varmasti poistaa liitteen pysyvästi?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Tärkeä ilmoitus" - }, - "setupTwoStepLogin": { - "message": "Määritä kaksivaiheinen kirjautuminen" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden lähettää tilisi sähköpostiosoitteeseen koodin, jolla voit vahvistaa kirjautumiset uusista laitteista helmikuusta 2025 alkaen." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Voit määrittää kaksivaiheisen kirjautumisen tilisi vaihtoehtoiseksi suojaustavaksi tai vaihtaa sähköpostiosoitteesi sellaiseen, johon sinulla on pääsy." - }, - "remindMeLater": { - "message": "Muistuta myöhemmin" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Onko sinulla luotettava pääsy sähköpostiisi, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ei ole" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Kyllä on" - }, - "turnOnTwoStepLogin": { - "message": "Ota kaksivaiheinen kirjautuminen käyttöön" - }, - "changeAcctEmail": { - "message": "Muuta tilin sähköpostiosoitetta" - }, "extensionWidth": { "message": "Laajennuksen leveys" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 2378bb832be..5f84ec1905a 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 3913245577d..cae2125eb4e 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Êtes-vous sûr de vouloir supprimer définitivement cette pièce jointe ?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Avis important" - }, - "setupTwoStepLogin": { - "message": "Configurer l'identification à deux facteurs" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden enverra un code au courriel de votre compte pour vérifier les connexions depuis de nouveaux appareils à partir de février 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Vous pouvez configurer l'identification à deux facteurs comme un moyen alternatif de protéger votre compte ou de changer votre adresse courriel à une autre à laquelle vous pouvez accéder." - }, - "remindMeLater": { - "message": "Me le rappeler plus tard" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Avez-vous un accès fiable à votre courriel $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Non, je ne l'ai pas" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Oui, je peux accéder à mon courriel de manière fiable" - }, - "turnOnTwoStepLogin": { - "message": "Activer l'identification à deux facteurs" - }, - "changeAcctEmail": { - "message": "Changer le courriel du compte" - }, "extensionWidth": { "message": "Largeur de l'extension" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index 5812bdcc6f9..8adbe560b22 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Estás seguro de que queres eliminar permanentemente este anexo?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Configurar verificación en dous pasos" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "A partir de febreiro de 2025 Bitwarden comezará a enviar correos con códigos de verificación para confirmar novos inicios de sesión á túa conta." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Podes configurar a verificación en 2 pasos como alternativa para protexer a túa conta ou cambiar o enderezo electrónico a un ó que teñas acceso." - }, - "remindMeLater": { - "message": "Lembrarmo máis tarde" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Tes acceso fiable ó teu correo? ($EMAIL$)", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Non, non o teño" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Si, teño acceso fiable ó meu correo" - }, - "turnOnTwoStepLogin": { - "message": "Activar verificación en dous pasos" - }, - "changeAcctEmail": { - "message": "Mudar de correo electrónico" - }, "extensionWidth": { "message": "Ancho da extensión" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index be56bbe5db4..759429f285a 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "האם אתה בטוח שברצונך למחוק לצמיתות צרופה זו?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "בטא" }, - "importantNotice": { - "message": "הודעה חשובה" - }, - "setupTwoStepLogin": { - "message": "הגדר כניסה דו־שלבית" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden ישלח קוד לדוא\"ל החשבון שלך כדי לאמת כניסות ממכשירים חדשים החל מפברואר 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "אתה יכול להגדיר כניסה דו־שלבית כדרך חלופית להגן על החשבון שלך או לשנות את הדוא\"ל שלך לאחד שאתה יכול לגשת אליו." - }, - "remindMeLater": { - "message": "הזכר לי מאוחר יותר" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "יש לך גישה מהימנה לדוא\"ל שלך, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "לא, אין לי" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "כן, אני יכול לגשת לדוא\"ל שלי באופן מהימן" - }, - "turnOnTwoStepLogin": { - "message": "הפעל כניסה דו־שלבית" - }, - "changeAcctEmail": { - "message": "שנה את דוא\"ל החשבון" - }, "extensionWidth": { "message": "רוחב הרחבה" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 5711c211ff0..f6ce3f6536a 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "महत्वपूर्ण सूचना" - }, - "setupTwoStepLogin": { - "message": "टू-स्टेप लॉगइन" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "बाद में मुझे याद कराएं" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "नहीं, मैं नहीं" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "हाँ, मैं आराम से अपना ईमेल देख सकता हूँ" - }, - "turnOnTwoStepLogin": { - "message": "टू-स्टेप लॉगइन सक्षम करें" - }, - "changeAcctEmail": { - "message": "अकाउंट का ईमेल बदलें" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "स्वतः भरण से समय बचाएँ" }, - "newLoginNudgeBody": { - "message": "एक वेबसाइट शामिल करें ताकि यह लॉगिन एक स्वतः भरण सुझाव के रूप में दिखाई दे।" + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 02f534458a2..205fa70dc32 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Sigurno želiš trajno izbrisati ovaj privitak?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Važna napomena" - }, - "setupTwoStepLogin": { - "message": "Postavi dvostruku autentifikaciju" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden će, počevši od veljače 2025., za provjeru prijava s novih uređaja poslati kôd na e-poštu tvog računa." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Prijavu dvostrukom autentifikacijom možeš postaviti kao alternativni način zaštite svog računa ili promijeni svoju e-poštu u onu kojoj možeš pristupiti." - }, - "remindMeLater": { - "message": "Podsjeti me kasnije" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Imaš li pouzdan pristup svojoj e-pošti: $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ne, nemam" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Da, pouzdano mogu pristupiti svojoj e-pošti" - }, - "turnOnTwoStepLogin": { - "message": "Uključi prijavu dvostrukom autentifikacijom" - }, - "changeAcctEmail": { - "message": "Promjeni e-poštu računa" - }, "extensionWidth": { "message": "Širina proširenja" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 27c617f2cdc..89ca99c51f7 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Bitwarden letöltése" + }, + "downloadBitwardenOnAllDevices": { + "message": "Bitwarden letöltése minden eszközön" + }, + "getTheMobileApp": { + "message": "Mobilalkalmazás beszerzése" + }, + "getTheMobileAppDesc": { + "message": "Útközben is hozzáférhetünk a jelszabkhoz a Bitwarden mobilalkalmazással." + }, + "getTheDesktopApp": { + "message": "Asztali alkalmazás beszerzése" + }, + "getTheDesktopAppDesc": { + "message": "Hozzáférhetünk a széfhez böngésző nélkül, majd állítsuk be a feloldást biometrikus adatokkal, hogy felgyorsítsuk a feloldást mind az asztali alkalmazásban, mind a böngésző bővítményben." + }, + "downloadFromBitwardenNow": { + "message": "Letöltés most a bitwarden.com webhelyről" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Biztosan véglegesen törlésre kerüljön ez a melléklet?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Béta" }, - "importantNotice": { - "message": "Fontos megjegyzés" - }, - "setupTwoStepLogin": { - "message": "Kétlépéses bejelentkezés beüzemelése" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "A Bitwarden 2025 februárjától kódot küld a fiókhoz tartozó email-címre, amellyel ellenőrizhetők az új eszközökről történő bejelentkezések." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "A fiók védelmének alternatív módjaként beállíthatunk kétlépcsős bejelentkezést vagy módosíthatjuk az email címet egy elérhetőre." - }, - "remindMeLater": { - "message": "Emlékeztetés később" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Megbízható a hozzáférés $EMAIL$ email címhez?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nem, nem érem el" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Igen, megbízhatóan hozzáférek az emailjeimhez" - }, - "turnOnTwoStepLogin": { - "message": "Kétlépéses bejelentkezés bekapcsolása" - }, - "changeAcctEmail": { - "message": "Fiók email cím megváltoztatása" - }, "extensionWidth": { "message": "Kiterjesztés szélesség" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Idő megtakarítás automatikus kitöltéssel" }, - "newLoginNudgeBody": { - "message": "Adjunk meg egy webhelyet, hogy ez a bejelentkezési név automatikusan kitöltendő javaslatként jelenjen meg." + "newLoginNudgeBodyOne": { + "message": "Bevonás:", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Webhely", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "így ez a bejelentkezés automatikus kitöltési javaslatként jelenik meg.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Zökkenőmentes online fizetés" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Fejlesztőbarát SSH hozzáférés" }, - "newSshNudgeBody": { - "message": "Tároljuk a kulcsokat és csatlakozzunk az SSH-ügynökhöz a gyors, titkosított hitelesítéshez." + "newSshNudgeBodyOne": { + "message": "Tároljuk el a kulcsokat és csatlakozzunk az SSH ügynökhöz a gyors, titkosított hitelesítéshez.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "További információ az SSH ügynökről", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 02fcb9bfcec..42363532e5e 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Logo Bitwarden" }, "extName": { "message": "Pengelola Sandi Bitwarden", @@ -887,7 +887,7 @@ "message": "Ikuti langkah-langkah di bawah untuk menyelesaikan log masuk." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Ikuti langkah-langkah berikut untuk menyelesaikan kegiatan masuk dengan kunci keamanan Anda." }, "restartRegistration": { "message": "Mulai ulang pendaftaran" @@ -1063,7 +1063,7 @@ "message": "Iya, Simpan Sekarang" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Lihat $ITEMNAME$, buka di jendela baru", "placeholders": { "itemName": { "content": "$1" @@ -1072,14 +1072,14 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Sunting sebelum menyimpan", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Pemberitahuan baru" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Pemberitahuan baru", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1089,7 +1089,7 @@ } }, "loginSaveConfirmation": { - "message": "$ITEMNAME$ saved to Bitwarden.", + "message": "$ITEMNAME$ disimpan ke Bitwarden.", "placeholders": { "itemName": { "content": "$1" @@ -1098,7 +1098,7 @@ "description": "Shown to user after item is saved." }, "loginUpdatedConfirmation": { - "message": "$ITEMNAME$ updated in Bitwarden.", + "message": "$ITEMNAME$ diperbarui di Bitwarden.", "placeholders": { "itemName": { "content": "$1" @@ -1115,11 +1115,11 @@ "description": "Button text for updating an existing login entry." }, "saveLogin": { - "message": "Save login", + "message": "Simpan log masuk", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Perbarui log masuk yang sudah ada", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { @@ -1131,7 +1131,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Bagus! Anda telah mengambil langkah-langkah untuk membuat Anda dan $ORGANIZATION$ lebih aman.", "placeholders": { "organization": { "content": "$1" @@ -1140,7 +1140,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Terima kasih telah membuat $ORGANIZATION$ menjadi lebih aman. Anda memiliki $TASK_COUNT$ kata sandi lagi untuk diperbarui.", "placeholders": { "organization": { "content": "$1" @@ -1152,7 +1152,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Ubah kata sandi selanjutnya", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -2355,7 +2355,7 @@ "message": "Kebijakan Privasi" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Kata sandi baru Anda tidak boleh sama dengan kata sandi Anda yang sekarang." }, "hintEqualsPassword": { "message": "Petunjuk kata sandi Anda tidak boleh sama dengan kata sandi Anda." @@ -2552,10 +2552,10 @@ "message": "Ubah lebih cepat kata sandi yang berrisiko" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Update your settings so you can quickly autofill your passwords and generate new ones" + "message": "Perbarui pengaturan Anda sehingga Anda dapat dengan cepat mengisi otomatis kata sandi Anda dan menghasilkan kata sandi baru" }, "reviewAtRiskLogins": { - "message": "Review at-risk logins" + "message": "Tinjau ulang info masuk yang berpotensi bahaya" }, "reviewAtRiskPasswords": { "message": "Tinjau kata sandi yang berrisiko" @@ -2565,30 +2565,30 @@ "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Gambaran daftar info masuk yang berpotensi bahaya." }, "generatePasswordSlideDesc": { - "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "message": "Hasilkan kata sandi yang kuat dan unik dengan cepat dengan menu isi otomatis Bitwarden pada situs yang berpotensi bahaya.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Gambaran dari menu isi otomatis Bitwarden yang menampilkan kata sandi yang dihasilkan." }, "updateInBitwarden": { - "message": "Update in Bitwarden" + "message": "Perbarui di Bitwarden" }, "updateInBitwardenSlideDesc": { - "message": "Bitwarden will then prompt you to update the password in the password manager.", + "message": "Bitwarden akan meminta Anda untuk memperbarui kata sandi di pengelola sandi.", "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Gambaran dari pemberitahuan Bitwarden yang meminta pengguna untuk memperbarui info masuk." }, "turnOnAutofill": { - "message": "Turn on autofill" + "message": "Nyalakan isi otomatis" }, "turnedOnAutofill": { - "message": "Turned on autofill" + "message": "Telah menyalakan isi otomatis" }, "dismiss": { "message": "Tutup" @@ -3038,7 +3038,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "Hanya benda-benda brankas satuan termasuk lampiran yang terhubung dengan $EMAIL$ yang akan diekspor. Benda brankas organisasi tidak akan disertakan", "placeholders": { "email": { "content": "$1", @@ -3068,7 +3068,7 @@ "message": "Bitwarden tidak bisa mendekripsi butir brankas yang tercantum di bawah." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "Hubungi layanan pelanggan", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { @@ -3565,28 +3565,28 @@ "message": "Perangkat dipercaya" }, "trustOrganization": { - "message": "Trust organization" + "message": "Percayai organisasi" }, "trust": { - "message": "Trust" + "message": "Percayai" }, "doNotTrust": { - "message": "Do not trust" + "message": "Jangan percayai" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Organisasi tidak tepercaya" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Demi keamanan akun Anda, hanya konfirmasi jika Anda telah memberikan akses darurat ke pengguna ini dan sidik jari mereka cocok dengan apa yang ditampilkan pada akun mereka" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Demi keamanan akun Anda, hanya lanjutkan apabila Anda adalah anggota dari organisasi ini, pemulihan akun telah aktif, dan sidik jari yang ditampilkan berikut cocok dengan sidik jari organisasi." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Organisasi ini memiliki kebijakan perusahaan yang akan mendaftarkan Anda pada pemulihan akun. Pendaftaran ini akan membolehkan pengelola organisasi untuk mengubah kata sandi Anda. Hanya lanjutkan jika Anda mengenali organisasi ini dan frasa sidik jari yang ditampilkan berikut cocok dengan sidik jari organisasi." }, "trustUser": { - "message": "Trust user" + "message": "Percayai pengguna" }, "sendsNoItemsTitle": { "message": "Tidak ada Send yang aktif", @@ -4328,7 +4328,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Lihat benda - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4352,7 +4352,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Isi otomatis - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Unduh Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Unduh Bitwarden" + }, + "getTheMobileApp": { + "message": "Dapatkan aplikasi ponsel" + }, + "getTheMobileAppDesc": { + "message": "Akses kata sandi Anda di perjalanan dengan aplikasi ponsel Bitwarden." + }, + "getTheDesktopApp": { + "message": "Dapatkan aplikasi desktop" + }, + "getTheDesktopAppDesc": { + "message": "Akses brankas Anda tanpa sebuah peramban, kemudian atur buka dengan biometrik untuk mempercepat membuka di aplikasi desktop dan ekstensi peramban." + }, + "downloadFromBitwardenNow": { + "message": "Unduh dari bitwarden.com sekarang" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Apakah Anda yakin ingin menghapus lampiran ini selamanya?" }, @@ -4756,10 +4777,10 @@ } }, "reorderWebsiteUriButton": { - "message": "Reorder website URI. Use arrow key to move item up or down." + "message": "Urutkan URI situs web. Gunakan tombol panah untuk memindahkan benda ke atas atau ke bawah." }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ dipindah ke atas, terletak di $INDEX$ dari $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4776,13 +4797,13 @@ } }, "selectCollectionsToAssign": { - "message": "Select collections to assign" + "message": "Pilih koleksi untuk ditetapkan" }, "personalItemTransferWarningSingular": { - "message": "1 item will be permanently transferred to the selected organization. You will no longer own this item." + "message": "1 benda akan dipindahkan selamanya ke organisasi terpilih. Anda tidak akan lagi memiliki benda ini." }, "personalItemsTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to the selected organization. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ benda akan dipindahkan selamanya ke organisasi terpilih. Anda tidak akan lagi memiliki benda-benda tersebut.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4791,7 +4812,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 item will be permanently transferred to $ORG$. You will no longer own this item.", + "message": "1 benda akan dipindahkan selamanya ke $ORG$. Anda tidak akan lagi memiliki benda ini.", "placeholders": { "org": { "content": "$1", @@ -4800,7 +4821,7 @@ } }, "personalItemsWithOrgTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to $ORG$. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ benda akan dipindahkan selamanya ke $ORG$. Anda tidak akan lagi memiliki benda-benda tersebut.", "placeholders": { "personal_items_count": { "content": "$1", @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Pemberitahuan penting" - }, - "setupTwoStepLogin": { - "message": "Siapkan log masuk dua langkah" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden akan mengirim suatu kode ke akun surel Anda untuk memverifikasi log masuk dari perangkat baru sejak Februari 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Anda dapat menyiapkan log masuk dua langkah sebagai cara alternatif untuk melindungi akun Anda atau mengubah surel Anda ke yang bisa Anda akses." - }, - "remindMeLater": { - "message": "Ingatkan saya nanti" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Apakah Anda punya akses yang handal ke surel Anda, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Tidak" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ya, saya dapat mengakses surel saya secara handla" - }, - "turnOnTwoStepLogin": { - "message": "Nyalakan log masuk dua langkah" - }, - "changeAcctEmail": { - "message": "Ubah surel akun" - }, "extensionWidth": { "message": "Lebar ekstensi" }, @@ -5276,31 +5261,50 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Situs web", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "agar info masuk ini muncul sebagai saran pengisian otomatis.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Pembayaran daring yang lancar" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Dengan kartu, isi otomatis dengan mudah formulir pembayaran secara aman dan akurat." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Sederhanakan pembuatan akun" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Dengan identitas, isi otomatis dengan cepat formulir pendaftaran atau kontrak yang panjang." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Menjaga data sensitif Anda tetap aman" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Dengan catatan, simpan secara aman data sensitif seperti rincian perbankan atau asuransi." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Akses SSH yang ramah pengembang" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Simpan kunci-kunci Anda dan sambungkan dengan agen SSH untuk otentikasi yang cepat dan terenkripsi.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Pelajari lebih lanjut tentang agen SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 652d82e5a44..272149b8e99 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Sei sicuro di voler eliminare definitivamente questo allegato?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Avviso importante" - }, - "setupTwoStepLogin": { - "message": "Imposta accesso in due passaggi" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden invierà un codice all'email del tuo account per verificare gli accessi da nuovi dispositivi a partire da febbraio 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Puoi impostare l'accesso in due passaggi come modo alternativo per proteggere il tuo account, o cambiare la tua e-mail in una alla quale puoi accedere." - }, - "remindMeLater": { - "message": "Ricordamelo più tardi" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Riesci ancora ad accedere a questa email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, non riesco" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sì, riesco ad accedere a questa email" - }, - "turnOnTwoStepLogin": { - "message": "Attiva accesso in due passaggi" - }, - "changeAcctEmail": { - "message": "Cambia l'email dell'account" - }, "extensionWidth": { "message": "Larghezza estensione" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 5422b24f8c7..e3340789813 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "この添付ファイルを完全に削除してもよろしいですか?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "ベータ" }, - "importantNotice": { - "message": "重要なお知らせ" - }, - "setupTwoStepLogin": { - "message": "2段階認証を設定する" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden は2025年2月以降、新しいデバイスからのログイン時にアカウントのメールアドレスに確認コードを送信します。" - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "代わりに2段階認証によるログインでアカウントを保護するか、メールアドレスをあなたがアクセスできるものに変更できます。" - }, - "remindMeLater": { - "message": "後で再通知" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "メールアドレス $EMAIL$ は、確実にアクセスできるものですか?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "いいえ、違います。" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "はい、メールアドレスには私が確実にアクセスできます" - }, - "turnOnTwoStepLogin": { - "message": "2段階認証によるログインを有効にする" - }, - "changeAcctEmail": { - "message": "アカウントのメールアドレスを変更する" - }, "extensionWidth": { "message": "拡張機能の幅" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 67772b142f7..19cde10e9b8 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 3bea1853b75..535bc2c7750 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index cfd7b992798..ebf5fb14653 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index a606042acad..37e08f7bd56 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "정말로 이 첨부파일을 영구적으로 삭제하시겠습니까?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "베타" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "확장 폭" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 063446d3ead..8da6c4c7c28 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Ar tikrai norite negrįžtamai ištrinti šį priedą?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 272765aded4..280c10ad2c4 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -3574,7 +3574,7 @@ "message": "Neuzticēties" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Apvienība nav uzticama" }, "emergencyAccessTrustWarning": { "message": "Lai nodrošinātu sava konta drošību, jāapstiprina tikai tad, ja šim lietotājam ir nodrošināta ārkārtas piekļuve un tā pirkstu nospiedums atbilsta tam, kas ir attēlots tā kontā" @@ -3583,7 +3583,7 @@ "message": "Lai nodrošinātu sava konta drošību, jāturpina tikai tad, ja esi šīs apvienības dalībnieks, ir iespējota konta atkope un zemāk attēlotais pirkstu nospiedums atbilst apvienības pirkstu nospiedumam." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Šai apvienībai ir uzņēmējdarbības pamatnostādne, kas Tevi iekļaus konta atkopē. Iekļaušana ļaus apvienības pārvaldītājiem nomainīt Tavu paroli. Turpini tikai tad, ja zini šo apvienību un zemāk attēlotā pirkstu nospieduma vārdkopa atbilst apvienības pirkstu nospiedumam!" }, "trustUser": { "message": "Uzticēties lietotājam" @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Lejupielādē Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Lejupielādē Bitwarden visās ierīcēs" + }, + "getTheMobileApp": { + "message": "Iegūsti viedierīču lietotni" + }, + "getTheMobileAppDesc": { + "message": "Piekļūsti savām parolēm kustībā ar Bitwarden viedierīču lietotni!" + }, + "getTheDesktopApp": { + "message": "Iegūsti darbvirsmas lietotni" + }, + "getTheDesktopAppDesc": { + "message": "Piekļūsti savai glabātavai bez pārlūka, tad iestati atslēgšanu ar biometriju, lai paātrinātu atslēgšanu gan darbvirsmas lietotnē, gan pārlūka paplašinājumā!" + }, + "downloadFromBitwardenNow": { + "message": "Lejupielādē no bitwarden.com tagad" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Vai tiešām neatgriezeniski izdzēst šo pielikumu?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Svarīgs paziņojums" - }, - "setupTwoStepLogin": { - "message": "Iestatīt divpakāpju pieteikšanos" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden, sākot ar 2025. gada februāri, nosūtīs kodu uz konta e-pasta adresi, lai apliecinātu pieteikšanos no jaunām ierīcēm." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Var iestatīt divpakāpju pieteikšanos kā citu veidu, kā aizsargāt savu kontu, vai iestatīt savu e-pasta adresi uz tādu, kurai ir piekļuve." - }, - "remindMeLater": { - "message": "Atgādināt man vēlāk" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Vai ir uzticama piekļuve savai e-pasta adresei $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nē, nav" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Jā, varu uzticami piekļūt savam e-pastam" - }, - "turnOnTwoStepLogin": { - "message": "Ieslēgt divpakāpju pieteikšanos" - }, - "changeAcctEmail": { - "message": "Mainīt konta e-pasta adresi" - }, "extensionWidth": { "message": "Paplašinājuma platums" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Laika ietaupīšana ar automātisko aizpildi" }, - "newLoginNudgeBody": { - "message": "Iekļauj tīmekļvietni, lai šis pieteikšanās vienums parādītos kā automātiskās aizpildes ieteikums!" + "newLoginNudgeBodyOne": { + "message": "Iekļauj", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "tīmekļvietni,", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "lai šis pieteikšanās vienums parādītos kā automātiskās aizpildes ieteikums!", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Plūdena apmaksa tiešsaistē" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Izstrādātājiem draudzīga SSH piekļuve" }, - "newSshNudgeBody": { - "message": "Glabā savas atslēgas un savienojies ar SSH aģentu ātrai, šifrētai autentificēšanai!" + "newSshNudgeBodyOne": { + "message": "Glabā savas atslēgas un savienojies ar SSH aģentu ātrai, šifrētai autentificēšanai!", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Uzzināt vairāk par SSH aģentu", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index d63300c77d3..be6bb7d6eb1 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 970e5bba9ed..0654f92164a 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 3bea1853b75..535bc2c7750 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 76caabc93d1..5d6016a8217 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Viktig melding" - }, - "setupTwoStepLogin": { - "message": "Sett opp 2-trinnspålogging" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Minn meg på det senere" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nei, det gjør jeg ikke" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, jeg har pålitelig tilgang til e-posten min" - }, - "turnOnTwoStepLogin": { - "message": "Slå på 2-trinnsinnlogging" - }, - "changeAcctEmail": { - "message": "Endre kontoens E-postadresse" - }, "extensionWidth": { "message": "Utvidelsens bredde" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Spar tid med auto-utfylling" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Utviklervennlig SSH-tilgang" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 3bea1853b75..535bc2c7750 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 85acc0e7060..1f8debfdde9 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Bitwarden downloaden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Bitwarden op alle apparaten downloaden" + }, + "getTheMobileApp": { + "message": "De mobiele app downloaden" + }, + "getTheMobileAppDesc": { + "message": "Toegang tot je wachtwoorden onderweg met de mobiele Bitwarden-app." + }, + "getTheDesktopApp": { + "message": "De desktop-app downloaden" + }, + "getTheDesktopAppDesc": { + "message": "Toegang tot je kluis zonder browser, vervolgens ontgrendelen met biometrische gegevens om sneller te ontgrendelen in zowel de desktopapp als browserextensie." + }, + "downloadFromBitwardenNow": { + "message": "Nu van bitwarden.com downloaden" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Weet je zeker dat je deze bijlage definitief wilt verwijderen?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Belangrijke mededeling" - }, - "setupTwoStepLogin": { - "message": "Tweestapsaanmelding instellen" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Vanaf februari 2025 stuurt Bitwarden een code naar het e-mailadres van je account om inloggen op nieuwe apparaten te verifiëren." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Je kunt tweestapsaanmelding instellen als een alternatieve manier om je account te beschermen of je e-mailadres te veranderen naar een waar je toegang toe hebt." - }, - "remindMeLater": { - "message": "Herinner me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Heb je betrouwbare toegang tot je e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nee, dat heb ik niet" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, ik heb betrouwbare toegang tot mijn e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Tweestapsaanmelding inschakelen" - }, - "changeAcctEmail": { - "message": "E-mailadres van het account veranderen" - }, "extensionWidth": { "message": "Extensiebreedte" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Tijd besparen met automatisch aanvullen" }, - "newLoginNudgeBody": { - "message": "Voeg een website toe zodat deze login wordt weergegeven als een automatische invulsuggestie." + "newLoginNudgeBodyOne": { + "message": "Voeg een", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "toe zodat deze login wordt weergegeven als een automatische invulsuggestie.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Naadloos online afrekenen" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Ontwikkelaars-vriendelijke SSH-toegang" }, - "newSshNudgeBody": { - "message": "Sla je sleutels op en verbind met de SSH-agent voor snelle, versleutelde authenticatie." + "newSshNudgeBodyOne": { + "message": "Sla je sleutels op en verbind met de SSH-agent voor snelle, versleutelde authenticatie.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Meer informatie over SSH-agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 3bea1853b75..535bc2c7750 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 3bea1853b75..535bc2c7750 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index 3dca53cff47..c551282e727 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Pobierz Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Pobierz Bitwarden na wszystkich urządzeniach" + }, + "getTheMobileApp": { + "message": "Pobierz aplikację mobilną" + }, + "getTheMobileAppDesc": { + "message": "Uzyskaj dostęp do haseł przy pomocy aplikacji mobilnej Bitwarden." + }, + "getTheDesktopApp": { + "message": "Pobierz aplikację desktopową" + }, + "getTheDesktopAppDesc": { + "message": "Uzyskaj dostęp do sejfu bez przeglądarki, a następnie ustaw odblokowanie biometryczne, aby przyspieszyć odblokowanie zarówno w aplikacji desktopowej, jak i w rozszerzeniu przeglądarki." + }, + "downloadFromBitwardenNow": { + "message": "Pobierz teraz z bitwarden.com" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Czy na pewno chcesz trwale usunąć ten załącznik?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Ważna informacja" - }, - "setupTwoStepLogin": { - "message": "Skonfiguruj dwustopniowe logowanie" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden wyśle kod na Twój adres e-mail w celu zweryfikowania logowania z nowych urządzeń, począwszy od lutego 2025 r." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Możesz skonfigurować dwustopniowe logowanie jako alternatywny sposób ochrony konta lub zmienić swój adres e-mail, do którego masz dostęp." - }, - "remindMeLater": { - "message": "Przypomnij mi później" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Czy masz pewny dostęp do swojego adresu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nie, nie mam" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Tak, mam pewny dostęp do mojego adresu e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Włącz dwustopniowe logowanie" - }, - "changeAcctEmail": { - "message": "Zmień adres e-mail konta" - }, "extensionWidth": { "message": "Szerokość rozszerzenia" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Oszczędzaj czas dzięki autouzupełnianiu" }, - "newLoginNudgeBody": { - "message": "Dołącz stronę internetową, aby ten login pojawił się jako sugestia autouzupełniania." + "newLoginNudgeBodyOne": { + "message": "Dołącz", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "stronę internetową, ", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "aby ten login pojawił się jako sugestia autouzupełniania.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Bezproblemowe zamówienia online" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Przyjazny dla deweloperów dostęp SSH" }, - "newSshNudgeBody": { - "message": "Przechowuj swoje klucze i połącz się z agentem SSH dla szybkiego, szyfrowanego uwierzytelniania." + "newSshNudgeBodyOne": { + "message": "Przechowuj swoje klucze i połącz się z agentem SSH dla szybkiego, szyfrowanego uwierzytelniania.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Dowiedz się więcej o agencie SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 93b36e18dd3..65ef99cd95e 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Tem certeza de que deseja excluir este anexo permanentemente?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Configurar login em duas etapas" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden enviará um código para o seu e-mail para verificar novos dispositivos a partir de fevereiro de 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Você pode configurar o login em duas etapas como uma forma alternativa de proteger sua conta ou mudar seu e-mail para um que você possa acessar." - }, - "remindMeLater": { - "message": "Lembre-me depois" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Você tem acesso ao seu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Não tenho" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sim, posso acessar meu e-mail de forma confiável" - }, - "turnOnTwoStepLogin": { - "message": "Ativar login em duas etapas" - }, - "changeAcctEmail": { - "message": "Alterar e-mail" - }, "extensionWidth": { "message": "Largura da janela" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Seja mais rápido com o preenchimento automático" }, - "newLoginNudgeBody": { - "message": "Inclua um site para que esse login apareça como uma sugestão de preenchimento automático." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 27d10138dbb..4b587672633 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Descarregar o Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Descarregue o Bitwarden em todos os dispositivos" + }, + "getTheMobileApp": { + "message": "Obtenha a app móvel" + }, + "getTheMobileAppDesc": { + "message": "Aceda às suas palavras-passe em qualquer lugar com a app móvel Bitwarden." + }, + "getTheDesktopApp": { + "message": "Obtenha a app para computador" + }, + "getTheDesktopAppDesc": { + "message": "Aceda ao seu cofre sem um navegador e, em seguida, configure o desbloqueio com biometria para acelerar o desbloqueio na app para computador e na extensão do navegador." + }, + "downloadFromBitwardenNow": { + "message": "Descarregue já a partir de bitwarden.com" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Tem a certeza de que pretende eliminar permanentemente este anexo?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Definir a verificação de dois passos" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "O Bitwarden enviará um código para o e-mail da sua conta para verificar as credenciais de novos dispositivos a partir de fevereiro de 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Pode configurar a verificação de dois passos como forma alternativa de proteger a sua conta ou alterar o seu e-mail para um a que possa aceder." - }, - "remindMeLater": { - "message": "Lembrar-me mais tarde" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Tem um acesso fiável ao seu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Não, não tenho" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sim, consigo aceder de forma fiável ao meu e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Ativar a verificação de dois passos" - }, - "changeAcctEmail": { - "message": "Alterar o e-mail da conta" - }, "extensionWidth": { "message": "Largura da extensão" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Poupe tempo com o preenchimento automático" }, - "newLoginNudgeBody": { - "message": "Inclua um site para que esta credencial apareça como uma sugestão de preenchimento automático." + "newLoginNudgeBodyOne": { + "message": "Inclua um", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "site", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "para que esta credencial apareça como uma sugestão de preenchimento automático.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Pagamentos online sem problemas" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Acesso SSH de fácil utilização pelos programadores" }, - "newSshNudgeBody": { - "message": "Guarde as suas chaves e ligue-se ao agente SSH para uma autenticação rápida e encriptada." + "newSshNudgeBodyOne": { + "message": "Guarde as suas chaves e ligue-se ao agente SSH para uma autenticação rápida e encriptada.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Saiba mais sobre o agente SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index f3e3fc4a536..648c2e06d53 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index c0a46bd4c7c..ebf053af3b6 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Скачать Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Скачать Bitwarden на все устройства" + }, + "getTheMobileApp": { + "message": "Скачать мобильное приложение" + }, + "getTheMobileAppDesc": { + "message": "Доступ к вашим паролям через мобильное приложение Bitwarden." + }, + "getTheDesktopApp": { + "message": "Скачать приложение для компьютера" + }, + "getTheDesktopAppDesc": { + "message": "Получите доступ к хранилищу без браузера, затем настройте разблокировку с помощью биометрии для ускорения разблокировки в приложении для компьютера и расширении браузера." + }, + "downloadFromBitwardenNow": { + "message": "Скачать с bitwarden.com" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Вы уверены, что хотите навсегда удалить это вложение?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Важное уведомление" - }, - "setupTwoStepLogin": { - "message": "Настроить двухэтапную аутентификацию" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Начиная с февраля 2025 года Bitwarden будет отправлять код на электронную почту вашего аккаунта для подтверждения авторизации с новых устройств." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "В качестве альтернативного способа защиты учетной записи вы можете настроить двухэтапную аутентификацию или сменить электронную почту на ту, к которой вы можете получить доступ." - }, - "remindMeLater": { - "message": "Напомнить позже" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Есть ли у вас надежный доступ к электронной почте $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Нет, не знаю" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, я имею надежный доступ к своей электронной почте" - }, - "turnOnTwoStepLogin": { - "message": "Включить двухэтапную аутентификацию" - }, - "changeAcctEmail": { - "message": "Изменить email аккаунта" - }, "extensionWidth": { "message": "Ширина расширения" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Экономьте время с помощью автозаполнения" }, - "newLoginNudgeBody": { - "message": "Включите сайт, чтобы этот логин отображался в качестве предложения для автозаполнения." + "newLoginNudgeBodyOne": { + "message": "Включите", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "сайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "чтобы этот логин отображался в качестве предложения для автозаполнения.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Оформление заказа через интернет" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Удобный для разработчиков SSH-доступ" }, - "newSshNudgeBody": { - "message": "Храните свои ключи и подключайтесь с помощью агента SSH для быстрой и зашифрованной аутентификации." + "newSshNudgeBodyOne": { + "message": "Храните свои ключи и подключайтесь с помощью агента SSH для быстрой и зашифрованной аутентификации.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Узнайте больше об агенте SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index 52764073b4a..87443d89615 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 1ea9c649010..81ac2a23620 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Stiahnuť Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Stiahnuť Bitwarden na všetky zariadenia" + }, + "getTheMobileApp": { + "message": "Získajte mobilnú aplikáciu" + }, + "getTheMobileAppDesc": { + "message": "Majte prístup k heslám na cestách pomocou mobilnej aplikácie Bitwarden." + }, + "getTheDesktopApp": { + "message": "Získať desktopovú aplikáciu" + }, + "getTheDesktopAppDesc": { + "message": "Pristupujte k trezoru bez prehliadača, a potom nastavte odomykanie pomocou biometrie, aby ste urýchlili odomykanie v desktopovej aplikácii aj v rozšírení prehliadača." + }, + "downloadFromBitwardenNow": { + "message": "Stiahnuť teraz z bitwarden.com" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Naozaj chcete natrvalo odstrániť túto prílohu?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Dôležité upozornenie" - }, - "setupTwoStepLogin": { - "message": "Nastavenie dvojstupňového prihlásenia" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden vám od februára 2025 pošle na e-mail vášho účtu kód na overenie prihlásenia z nových zariadení." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Ako alternatívny spôsob ochrany svojho účtu môžete nastaviť dvojstupňové prihlásenie alebo zmeniť e-mail na taký, ku ktorému máte prístup." - }, - "remindMeLater": { - "message": "Pripomenúť neskôr" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Máte zaručený prístup k e-mailu $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nie, nemám" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Áno, mám zaručený prístup k e-mailu" - }, - "turnOnTwoStepLogin": { - "message": "Zapnúť dvojstupňové prihlásenie" - }, - "changeAcctEmail": { - "message": "Zmeniť e-mail účtu" - }, "extensionWidth": { "message": "Šírka rozšírenia" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Ušetrite čas s automatickým vypĺňaním" }, - "newLoginNudgeBody": { - "message": "Zadajte webovú stránku, aby sa tieto prihlasovacie údaje zobrazili ako návrh na automatické vyplnenie." + "newLoginNudgeBodyOne": { + "message": "Zahrnúť", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "webstránku", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "aby sa tieto prihlasovacie údaje zobrazili ako návrh na automatické vyplnenie.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Bezproblémová online registrácia" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Prístup SSH vhodný pre vývojárov" }, - "newSshNudgeBody": { - "message": "Uložte si kľúče a pripojte sa pomocou agenta SSH na rýchle šifrované overovanie." + "newSshNudgeBodyOne": { + "message": "Uložte si kľúče a pripojte sa pomocou agenta SSH na rýchle šifrované overovanie.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Viac informácií o agentovi SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 95fd10f5226..7bc5abe9e0f 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index 349511457e3..55ecd18295b 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Да ли сте сигурни да желите да трајно избришете овај прилог?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Бета" }, - "importantNotice": { - "message": "Важно обавештење" - }, - "setupTwoStepLogin": { - "message": "Поставити дво-степенску пријаву" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden ће послати кôд на имејл вашег налога за верификовање пријављивања са нових уређаја почевши од фебруара 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Можете да подесите пријаву у два корака као алтернативни начин да заштитите свој налог или да промените свој имејл у један који можете да приступите." - }, - "remindMeLater": { - "message": "Подсети ме касније" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Да ли имате поуздан приступ својим имејлом, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Не, ненам" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, могу поуздано да приступим овим имејлом" - }, - "turnOnTwoStepLogin": { - "message": "Упалити дво-степенску пријаву" - }, - "changeAcctEmail": { - "message": "Променити имејл налога" - }, "extensionWidth": { "message": "Ширина додатка" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Уштедите време са ауто-пуњењем" }, - "newLoginNudgeBody": { - "message": "Укључите веб страницу тако да се ова пријава појављује као предлог за ауто-пуњење." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Лак SSH приступ" }, - "newSshNudgeBody": { - "message": "Чувајте кључеве и повежите се са SSH агент за брзу, шифровану аутентификацију." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index 6c7047c2f4b..16f28c3f5ed 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 3bea1853b75..535bc2c7750 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index f7736390ffc..43a940196aa 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 5de92e19b6e..d97b023a695 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -3571,10 +3571,10 @@ "message": "Trust" }, "doNotTrust": { - "message": "Do not trust" + "message": "Güvenme" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Kuruluş güvenilir değil" }, "emergencyAccessTrustWarning": { "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Bitwarden’ı indirin" + }, + "downloadBitwardenOnAllDevices": { + "message": "Bitwarden’ı tüm cihazlarınıza indirin" + }, + "getTheMobileApp": { + "message": "Mobil uygulamayı indirin" + }, + "getTheMobileAppDesc": { + "message": "Parolalarınıza Bitwarden mobil uygulaması sayesinde her yerden ulaşın." + }, + "getTheDesktopApp": { + "message": "Masaüstü uygulamasını indirin" + }, + "getTheDesktopAppDesc": { + "message": "Kasanıza tarayıcıyı kullanmadan erişin, biyometri ile kilit açmayı etkinleştirerek hem masaüstü uygulamasından hem de tarayıcı uzantısından kilit açmayı geliştirin." + }, + "downloadFromBitwardenNow": { + "message": "Şimdi bitwarden.com’dan indirin" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Bu dosyayı kalıcı olarak silmek istediğinizden emin misiniz?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Önemli uyarı" - }, - "setupTwoStepLogin": { - "message": "İki adımlı girişi ayarla" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Şubat 2025 itibarıyla Bitwarden, yeni cihazlardan yeni girişleri doğrulamanız için e-posta adresinize bir kod gönderecektir." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Hesabınızı korumanın alternatif bir yolu olarak iki adımlı girişi etkinleştirebilirsiniz. Aksi halde e-posta adresinizin doğru olduğundan emin olmalısınız." - }, - "remindMeLater": { - "message": "Daha sonra hatırlat" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "$EMAIL$ adresinize sağlıklı bir şekilde erişebiliyor musunuz?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Hayır, erişemiyorum" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Evet, e-postalarıma sağlıklı bir şekilde erişebiliyorum" - }, - "turnOnTwoStepLogin": { - "message": "İki adımlı girişi etkinleştir" - }, - "changeAcctEmail": { - "message": "Hesap e-postasını değiştir" - }, "extensionWidth": { "message": "Uzantı genişliği" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Otomatik doldurmayla zaman kazanın" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Bu hesabın otomatik doldurma önerisi olarak görünmesi için bir", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "web sitesi", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "ekleyin.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Kesintisiz çevrimiçi alışveriş" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index 5303715dfcb..8de8ba8a97b 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -1072,7 +1072,7 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Редагувати перед збереженням", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { @@ -1115,11 +1115,11 @@ "description": "Button text for updating an existing login entry." }, "saveLogin": { - "message": "Save login", + "message": "Зберегти запис", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Оновити наявний запис", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { @@ -3565,28 +3565,28 @@ "message": "Довірений пристрій" }, "trustOrganization": { - "message": "Trust organization" + "message": "Довіряти організації" }, "trust": { - "message": "Trust" + "message": "Довіряти" }, "doNotTrust": { - "message": "Do not trust" + "message": "Не довіряти" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Це не довірена організація" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Щоб захистити свій обліковий запис, підтверджуйте лише якщо ви надали цьому користувачу екстрений доступ, і його цифровий відбиток збігається з показаним в його обліковому записі." }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Щоб захистити свій обліковий запис, продовжуйте лише якщо ви є учасником цієї організації, маєте ввімкнене відновлення облікового запису, і показаний нижче цифровий відбиток збігається з відбитком організації." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Ця організація має політику компанії, яка розгорне для вас відновлення облікового запису. Розгортання дасть змогу адміністраторам організації змінювати ваш пароль. Продовжуйте тільки якщо ви впізнаєте організацію і наведена нижче фраза відбитка відповідає відбитку організації." }, "trustUser": { - "message": "Trust user" + "message": "Довіряти користувачу" }, "sendsNoItemsTitle": { "message": "Немає активних відправлень", @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Завантажити Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Завантажити Bitwarden на всіх пристроях" + }, + "getTheMobileApp": { + "message": "Отримати програму для мобільного пристрою" + }, + "getTheMobileAppDesc": { + "message": "Користуйтеся своїми паролями звідусіль за допомогою програми Bitwarden для мобільних пристроїв." + }, + "getTheDesktopApp": { + "message": "Отримати програму для комп'ютера" + }, + "getTheDesktopAppDesc": { + "message": "Користуйтеся сховищем без браузера, налаштуйте біометричне розблокування, щоб спростити доступ у програмі на комп'ютері та в розширенні браузера." + }, + "downloadFromBitwardenNow": { + "message": "Завантажити з bitwarden.com" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Ви дійсно хочете остаточно видалити це вкладення?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Бета" }, - "importantNotice": { - "message": "Важлива інформація" - }, - "setupTwoStepLogin": { - "message": "Налаштувати двоетапну перевірку" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden надсилатиме код підтвердження на електронну пошту вашого облікового запису під час входу з нових пристроїв, починаючи з лютого 2025 року." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Ви можете налаштувати двоетапну перевірку як альтернативний спосіб захисту свого облікового запису, або змінити електронну пошту на таку, до якої ви маєте доступ." - }, - "remindMeLater": { - "message": "Нагадати пізніше" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Ви маєте постійний доступ до своєї електронної пошти $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ні, не маю" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Так, я маю постійний доступ до своєї електронної пошти" - }, - "turnOnTwoStepLogin": { - "message": "Увімкнути двоетапну перевірку" - }, - "changeAcctEmail": { - "message": "Змінити адресу е-пошти" - }, "extensionWidth": { "message": "Ширина вікна розширення" }, @@ -5226,10 +5211,10 @@ "message": "Змінити ризикований пароль" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Параметри сховища" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "Сховище захищає не лише ваші паролі. Безпечно зберігайте дані для входу, посвідчення, картки й нотатки." }, "introCarouselLabel": { "message": "Вітаємо в Bitwarden" @@ -5259,48 +5244,67 @@ "message": "Зберігайте скільки завгодно паролів на необмеженій кількості пристроїв, використовуючи Bitwarden для мобільних пристроїв, браузерів та комп'ютерів." }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Імпортуйте наявні паролі" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Скористайтеся інструментом імпортування, щоб швидко перенести записи до Bitwarden, а не додавати їх вручну." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Імпортувати" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Вітаємо у вашому сховищі!" }, "hasItemsVaultNudgeBody": { - "message": "Autofill items for the current page\nFavorite items for easy access\nSearch your vault for something else" + "message": "Автозаповнення на відкритій сторінці\nОбрані записи для легкого доступу\nПошук будь-яких даних у сховищі" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Заощаджуйте час з автозаповненням" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Включити", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Вебсайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "щоб цей запис з'являвся у пропозиціях автозаповнення.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Швидке оформлення замовлень" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "За допомогою записів для карток можна безпечно й точно заповнювати платіжні форми." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Спростіть створення облікових записів" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "За допомогою записів для посвідчень можна швидко заповнювати форми реєстрації чи контактів." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Захистіть свої конфіденційні дані" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "За допомогою нотаток можна надійно зберігати конфіденційні дані, як-от банківську інформацію або страхування." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "SSH-доступ для розробників" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Зберігайте свої ключі та під'єднуйтеся за допомогою SSH-агента для швидкої зашифрованої автентифікації.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Докладніше про SSH-агента", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 5616e0eb0ee..ec9dc82e6ca 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Bạn có chắc chắn muốn xóa vĩnh viễn tệp đính kèm này không?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta" }, - "importantNotice": { - "message": "Thông báo quan trọng" - }, - "setupTwoStepLogin": { - "message": "Thiết lập đăng nhập hai bước" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Nhắc sau" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Không, tôi không có" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Có, tôi có quyền truy cập email này" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Đổi email tài khoản" - }, "extensionWidth": { "message": "Extension width" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index c1f35ec3eb9..a453fe8580a 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "下载 Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "在所有设备上下载 Bitwarden" + }, + "getTheMobileApp": { + "message": "获取移动 App" + }, + "getTheMobileAppDesc": { + "message": "使用 Bitwarden 移动 App,随时随地访问您的密码。" + }, + "getTheDesktopApp": { + "message": "获取桌面 App" + }, + "getTheDesktopAppDesc": { + "message": "不使用浏览器访问您的密码库,然后设置生物识别解锁,从而在桌面 App 和浏览器扩展中实现快速解锁。" + }, + "downloadFromBitwardenNow": { + "message": "立即从 bitwarden.com 下载" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "您确定要永久删除此附件吗?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "Beta 版" }, - "importantNotice": { - "message": "重要通知" - }, - "setupTwoStepLogin": { - "message": "设置两步登录" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "从 2025 年 02 月起,当有来自新设备的登录时,Bitwarden 将向您的账户电子邮箱发送验证码。" - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "您可以设置两步登录作为保护账户的替代方法,或将您的电子邮箱更改为您可以访问的电子邮箱。" - }, - "remindMeLater": { - "message": "稍后提醒我" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "您可以正常访问您的电子邮箱 $EMAIL$ 吗?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "不,我不能" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "是的,我可以正常访问我的电子邮箱" - }, - "turnOnTwoStepLogin": { - "message": "启用两步登录" - }, - "changeAcctEmail": { - "message": "更改账户电子邮箱" - }, "extensionWidth": { "message": "扩展宽度" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "使用自动填充节省时间" }, - "newLoginNudgeBody": { - "message": "请包含网站,以便将此登录显示为自动填充建议。" + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "无缝在线结账" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "开发人员友好的 SSH 访问权限" }, - "newSshNudgeBody": { - "message": "存储您的密钥并与 SSH 代理连接,以进行快速、加密的身份验证。" + "newSshNudgeBodyOne": { + "message": "存储您的密钥并与 SSH 代理连接,以进行快速、加密的身份验证。", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "进一步了解 SSH 代理", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 0636078d05b..ddea3dd7fc6 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -4512,6 +4512,27 @@ } } }, + "downloadBitwarden": { + "message": "Download Bitwarden" + }, + "downloadBitwardenOnAllDevices": { + "message": "Download Bitwarden on all devices" + }, + "getTheMobileApp": { + "message": "Get the mobile app" + }, + "getTheMobileAppDesc": { + "message": "Access your passwords on the go with the Bitwarden mobile app." + }, + "getTheDesktopApp": { + "message": "Get the desktop app" + }, + "getTheDesktopAppDesc": { + "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + }, + "downloadFromBitwardenNow": { + "message": "Download from bitwarden.com now" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "您確定要永久刪除此附檔嗎?" }, @@ -5135,42 +5156,6 @@ "beta": { "message": "測試版" }, - "importantNotice": { - "message": "重要通知" - }, - "setupTwoStepLogin": { - "message": "啟動兩階段登入" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "從 2025 年 2 月開始,Bitwarden 會傳送代碼到您的帳號電子郵件中來驗證新裝置的登入。" - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "您可以啟動兩階段認證來保護您的帳號或更改您可以存取的電子郵件位址。" - }, - "remindMeLater": { - "message": "稍後再提醒我" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "您可以存取您的電子郵件位址 $EMAIL$ 嗎?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "不,我不行" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "是,我可以存取我的電子郵件位址" - }, - "turnOnTwoStepLogin": { - "message": "啟動兩階段登入" - }, - "changeAcctEmail": { - "message": "更改帳號電子郵件位址" - }, "extensionWidth": { "message": "擴充套件寬度" }, @@ -5276,8 +5261,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -5300,7 +5297,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } From e2201ef6678b565088d96b03c403f47192a6d39c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 13:10:08 +0200 Subject: [PATCH 04/36] [deps] UI Foundation: Update storybook monorepo to v8.6.12 (#14493) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 814 ++++++++++------------------------------------ package.json | 22 +- 2 files changed, 182 insertions(+), 654 deletions(-) diff --git a/package-lock.json b/package-lock.json index 823be6819e1..908b9e29d8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,17 +85,17 @@ "@electron/rebuild": "3.7.2", "@lit-labs/signals": "0.1.2", "@ngtools/webpack": "18.2.12", - "@storybook/addon-a11y": "8.5.2", - "@storybook/addon-actions": "8.5.2", + "@storybook/addon-a11y": "8.6.12", + "@storybook/addon-actions": "8.6.12", "@storybook/addon-designs": "8.2.1", - "@storybook/addon-essentials": "8.5.2", - "@storybook/addon-interactions": "8.5.2", - "@storybook/addon-links": "8.5.2", - "@storybook/addon-themes": "8.5.2", - "@storybook/angular": "8.5.2", - "@storybook/manager-api": "8.5.2", - "@storybook/theming": "8.5.2", - "@storybook/web-components-webpack5": "8.5.2", + "@storybook/addon-essentials": "8.6.12", + "@storybook/addon-interactions": "8.6.12", + "@storybook/addon-links": "8.6.12", + "@storybook/addon-themes": "8.6.12", + "@storybook/angular": "8.6.12", + "@storybook/manager-api": "8.6.12", + "@storybook/theming": "8.6.12", + "@storybook/web-components-webpack5": "8.6.12", "@types/argon2-browser": "1.18.4", "@types/chrome": "0.0.306", "@types/firefox-webext-browser": "120.0.4", @@ -166,7 +166,7 @@ "rimraf": "6.0.1", "sass": "1.83.4", "sass-loader": "16.0.4", - "storybook": "8.5.2", + "storybook": "8.6.12", "style-loader": "4.0.0", "tailwindcss": "3.4.17", "ts-jest": "29.2.2", @@ -10070,29 +10070,29 @@ } }, "node_modules/@storybook/addon-a11y": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.5.2.tgz", - "integrity": "sha512-GhZrDfqhZ9l6egFcyAgjO6g0iaTJCDO/H0NOAadLrw55aO1apo07H12YoWtJeA00wUqvuufmh5DGo/CExLvgSQ==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.6.12.tgz", + "integrity": "sha512-H28zHiL8uuv29XsVNf9VjNWsCeht/l66GPYHT7aom1jh+f3fS9+sutrCGEBC/T7cnRpy8ZyuHCtihUqS+RI4pg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/addon-highlight": "8.5.2", - "@storybook/test": "8.5.2", - "axe-core": "^4.2.0", - "vitest-axe": "^0.1.0" + "@storybook/addon-highlight": "8.6.12", + "@storybook/global": "^5.0.0", + "@storybook/test": "8.6.12", + "axe-core": "^4.2.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-actions": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.5.2.tgz", - "integrity": "sha512-g0gLesVSFgstUq5QphsLeC1vEdwNHgqo2TE0m+STM47832xbxBwmK6uvBeqi416xZvnt1TTKaaBr4uCRRQ64Ww==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.6.12.tgz", + "integrity": "sha512-B5kfiRvi35oJ0NIo53CGH66H471A3XTzrfaa6SxXEJsgxxSeKScG5YeXcCvLiZfvANRQ7QDsmzPUgg0o3hdMXw==", "dev": true, "license": "MIT", "dependencies": { @@ -10107,7 +10107,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-actions/node_modules/uuid": { @@ -10125,9 +10125,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.5.2.tgz", - "integrity": "sha512-l9WkI4QHfINeFQkW9K0joaM7WweKktwIIyUPEvyoupHT4n9ccJHAlWjH4SBmzwI1j1Zt0G3t+bq8mVk/YK6Fsg==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.6.12.tgz", + "integrity": "sha512-lmIAma9BiiCTbJ8YfdZkXjpnAIrOUcgboLkt1f6XJ78vNEMnLNzD9gnh7Tssz1qrqvm34v9daDjIb+ggdiKp3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10140,13 +10140,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-controls": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.5.2.tgz", - "integrity": "sha512-wkzw2vRff4zkzdvC/GOlB2PlV0i973u8igSLeg34TWNEAa4bipwVHnFfIojRuP9eN1bZL/0tjuU5pKnbTqH7aQ==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.6.12.tgz", + "integrity": "sha512-9VSRPJWQVb9wLp21uvpxDGNctYptyUX0gbvxIWOHMH3R2DslSoq41lsC/oQ4l4zSHVdL+nq8sCTkhBxIsjKqdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10159,7 +10159,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-designs": { @@ -10197,18 +10197,18 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.5.2.tgz", - "integrity": "sha512-pRLJ/Qb/3XHpjS7ZAMaOZYtqxOuI8wPxVKYQ6n5rfMSj2jFwt5tdDsEJdhj2t5lsY8HrzEZi8ExuW5I5RoUoIQ==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.6.12.tgz", + "integrity": "sha512-kEezQjAf/p3SpDzLABgg4fbT48B6dkT2LiZCKTRmCrJVtuReaAr4R9MMM6Jsph6XjbIj/SvOWf3CMeOPXOs9sg==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.5.2", - "@storybook/csf-plugin": "8.5.2", - "@storybook/react-dom-shim": "8.5.2", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "@storybook/blocks": "8.6.12", + "@storybook/csf-plugin": "8.6.12", + "@storybook/react-dom-shim": "8.6.12", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" }, "funding": { @@ -10216,25 +10216,25 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-essentials": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.5.2.tgz", - "integrity": "sha512-MfojJKxDg0bnjOE0MfLSaPweAud1Esjaf1D9M8EYnpeFnKGZApcGJNRpHCDiHrS5BMr8hHa58RDVc7ObFTI4Dw==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.6.12.tgz", + "integrity": "sha512-Y/7e8KFlttaNfv7q2zoHMPdX6hPXHdsuQMAjYl5NG9HOAJREu4XBy4KZpbcozRe4ApZ78rYsN/MO1EuA+bNMIA==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/addon-actions": "8.5.2", - "@storybook/addon-backgrounds": "8.5.2", - "@storybook/addon-controls": "8.5.2", - "@storybook/addon-docs": "8.5.2", - "@storybook/addon-highlight": "8.5.2", - "@storybook/addon-measure": "8.5.2", - "@storybook/addon-outline": "8.5.2", - "@storybook/addon-toolbars": "8.5.2", - "@storybook/addon-viewport": "8.5.2", + "@storybook/addon-actions": "8.6.12", + "@storybook/addon-backgrounds": "8.6.12", + "@storybook/addon-controls": "8.6.12", + "@storybook/addon-docs": "8.6.12", + "@storybook/addon-highlight": "8.6.12", + "@storybook/addon-measure": "8.6.12", + "@storybook/addon-outline": "8.6.12", + "@storybook/addon-toolbars": "8.6.12", + "@storybook/addon-viewport": "8.6.12", "ts-dedent": "^2.0.0" }, "funding": { @@ -10242,13 +10242,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-highlight": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.5.2.tgz", - "integrity": "sha512-QjJfY+8e1bi6FeGfVlgxzv/I8DUyC83lZq8zfTY7nDUCVdmKi8VzmW0KgDo5PaEOFKs8x6LKJa+s5O0gFQaJMw==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.6.12.tgz", + "integrity": "sha512-9FITVxdoycZ+eXuAZL9ElWyML/0fPPn9UgnnAkrU7zkMi+Segq/Tx7y+WWanC5zfWZrXAuG6WTOYEXeWQdm//w==", "dev": true, "license": "MIT", "dependencies": { @@ -10259,19 +10259,19 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-interactions": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.5.2.tgz", - "integrity": "sha512-Gn9Egk2OS0BkkHd671Y0pIqBr4noAOLUfnpxhHE8r0Tt7FmJFeVSN+dqK7hQeUmKL5jdSY25FTYROg65JmtGOA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.6.12.tgz", + "integrity": "sha512-cTAJlTq6uVZBEbtwdXkXoPQ4jHOAGKQnYSezBT4pfNkdjn/FnEeaQhMBDzf14h2wr5OgBnJa6Lmd8LD9ficz4A==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.5.2", - "@storybook/test": "8.5.2", + "@storybook/instrumenter": "8.6.12", + "@storybook/test": "8.6.12", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -10280,17 +10280,16 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-links": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.5.2.tgz", - "integrity": "sha512-eDKOQoAKKUQo0JqeLNzMLu6fm1s3oxwZ6O+rAWS6n5bsrjZS2Ul8esKkRriFVwHtDtqx99wneqOscS8IzE/ENw==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.6.12.tgz", + "integrity": "sha512-AfKujFHoAxhxq4yu+6NwylltS9lf5MPs1eLLXvOlwo3l7Y/c68OdxJ7j68vLQhs9H173WVYjKyjbjFxJWf/YYg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf": "0.1.12", "@storybook/global": "^5.0.0", "ts-dedent": "^2.0.0" }, @@ -10300,7 +10299,7 @@ }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.5.2" + "storybook": "^8.6.12" }, "peerDependenciesMeta": { "react": { @@ -10309,9 +10308,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.5.2.tgz", - "integrity": "sha512-g7Kvrx8dqzeYWetpWYVVu4HaRzLAZVlOAlZYNfCH/aJHcFKp/p5zhPXnZh8aorxeCLHW1QSKcliaA4BNPEvTeg==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.6.12.tgz", + "integrity": "sha512-tACmwqqOvutaQSduw8SMb62wICaT1rWaHtMN3vtWXuxgDPSdJQxLP+wdVyRYMAgpxhLyIO7YRf++Hfha9RHgFg==", "dev": true, "license": "MIT", "dependencies": { @@ -10323,13 +10322,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-outline": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.5.2.tgz", - "integrity": "sha512-laMVLT1xluSqMa2mMzmS1kdKcjX0HI9Fw+7pM3r4drtGWtxpyBT32YFqKfWFIBhcd364ti2tDUz9FlygGQ1rKw==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.6.12.tgz", + "integrity": "sha512-1ylwm+n1s40S91No0v9T4tCjZORu3GbnjINlyjYTDLLhQHyBQd3nWR1Y1eewU4xH4cW9SnSLcMQFS/82xHqU6A==", "dev": true, "license": "MIT", "dependencies": { @@ -10341,13 +10340,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-themes": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-8.5.2.tgz", - "integrity": "sha512-MTJkPwXqLK2Co186EUw2wr+1CpVRMbuWsOmQvhMHeU704kQtSYKkhu/xmaExuDYMupn5xiKG0p8Pt5Ck3fEObQ==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-8.6.12.tgz", + "integrity": "sha512-eqE40MUKTz9lLEOusXjRuDC7DwCSIwlgEnlbvhhEEme8IeKf2di6yvlhenY4nn5QfkUwY1POnZxfJ2OpXj0gqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10358,13 +10357,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.5.2.tgz", - "integrity": "sha512-gHQtVCiq7HRqdYQLOmX8nhtV1Lqz4tOCj4BVodwwf8fUcHyNor+2FvGlQjngV2pIeCtxiM/qmG63UpTBp57ZMA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.6.12.tgz", + "integrity": "sha512-HEcSzo1DyFtIu5/ikVOmh5h85C1IvK9iFKSzBR6ice33zBOaehVJK+Z5f487MOXxPsZ63uvWUytwPyViGInj+g==", "dev": true, "license": "MIT", "funding": { @@ -10372,13 +10371,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/addon-viewport": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.5.2.tgz", - "integrity": "sha512-W+7nrMQmxHcUNGsXjmb/fak1mD0a5vf4y1hBhSM7/131t8KBsvEu4ral8LTUhc4ZzuU1eIUM0Qth7SjqHqm5bA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.6.12.tgz", + "integrity": "sha512-EXK2LArAnABsPP0leJKy78L/lbMWow+EIJfytEP5fHaW4EhMR6h7Hzaqzre6U0IMMr/jVFa1ci+m0PJ0eQc2bw==", "dev": true, "license": "MIT", "dependencies": { @@ -10389,23 +10388,23 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/angular": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-8.5.2.tgz", - "integrity": "sha512-vYfbzckQvvFqwc5/5oDOOP2Gx7Dcq5KQpwPFHPSNH9TLBIXHk4Hjklgn62k6sxk1YIWRJJNo8GWERpgN0JOXxQ==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-8.6.12.tgz", + "integrity": "sha512-hYbx+CaftAWuomGQ+wXpheodM5C7dTK2m/dpJ0JiWMxhMBt5Jh0SerW7KiFvODHwctXy0KZ8ZUT1PMhqPIldwg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/builder-webpack5": "8.5.2", - "@storybook/components": "8.5.2", - "@storybook/core-webpack": "8.5.2", + "@storybook/builder-webpack5": "8.6.12", + "@storybook/components": "8.6.12", + "@storybook/core-webpack": "8.6.12", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.5.2", - "@storybook/preview-api": "8.5.2", - "@storybook/theming": "8.5.2", + "@storybook/manager-api": "8.6.12", + "@storybook/preview-api": "8.6.12", + "@storybook/theming": "8.6.12", "@types/react": "^18.0.37", "@types/react-dom": "^18.0.11", "@types/semver": "^7.3.4", @@ -10430,6 +10429,7 @@ "@angular-devkit/architect": ">=0.1500.0 < 0.2000.0", "@angular-devkit/build-angular": ">=15.0.0 < 20.0.0", "@angular-devkit/core": ">=15.0.0 < 20.0.0", + "@angular/animations": ">=15.0.0 < 20.0.0", "@angular/cli": ">=15.0.0 < 20.0.0", "@angular/common": ">=15.0.0 < 20.0.0", "@angular/compiler": ">=15.0.0 < 20.0.0", @@ -10439,24 +10439,29 @@ "@angular/platform-browser": ">=15.0.0 < 20.0.0", "@angular/platform-browser-dynamic": ">=15.0.0 < 20.0.0", "rxjs": "^6.0.0 || ^7.4.0", - "storybook": "^8.5.2", + "storybook": "^8.6.12", "typescript": "^4.0.0 || ^5.0.0", "zone.js": ">= 0.11.1 < 1.0.0" }, "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + }, "@angular/cli": { "optional": true + }, + "zone.js": { + "optional": true } } }, "node_modules/@storybook/blocks": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.5.2.tgz", - "integrity": "sha512-C6Bz/YTG5ZuyAzglqgqozYUWaS39j1PnkVuMNots6S3Fp8ZJ6iZOlQ+rpumiuvnbfD5rkEZG+614RWNyNlFy7g==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.6.12.tgz", + "integrity": "sha512-DohlTq6HM1jDbHYiXL4ZvZ00VkhpUp5uftzj/CZDLY1fYHRjqtaTwWm2/OpceivMA8zDitLcq5atEZN+f+siTg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf": "0.1.12", "@storybook/icons": "^1.2.12", "ts-dedent": "^2.0.0" }, @@ -10465,9 +10470,9 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.5.2" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "storybook": "^8.6.12" }, "peerDependenciesMeta": { "react": { @@ -10479,13 +10484,13 @@ } }, "node_modules/@storybook/builder-webpack5": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.5.2.tgz", - "integrity": "sha512-P4zpavhy9cL1GtITlFp1amTgNSfaQyi60jJwi7joUj0z4RRyBr8YpGi5il9PlaxiY2HROsCdKJftTNzWn058yA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.6.12.tgz", + "integrity": "sha512-Z7RsQ/1+HbxdbM69JrEFcTL+pnVKUTMmeURMn5/eOvYTGjBtM18vbQTj0LjCUDIjC+v9U+uX8ZJEUVxFbGcxBw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/core-webpack": "8.5.2", + "@storybook/core-webpack": "8.6.12", "@types/semver": "^7.3.4", "browser-assert": "^1.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -10515,7 +10520,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" }, "peerDependenciesMeta": { "typescript": { @@ -10606,9 +10611,9 @@ } }, "node_modules/@storybook/components": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.5.2.tgz", - "integrity": "sha512-o5vNN30sGLTJBeGk5SKyekR4RfTpBTGs2LDjXGAmpl2MRhzd62ix8g+KIXSR0rQ55TCvKUl5VR2i99ttlRcEKw==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.6.12.tgz", + "integrity": "sha512-FiaE8xvCdvKC2arYusgtlDNZ77b8ysr8njAYQZwwaIHjy27TbR2tEpLDCmUwSbANNmivtc/xGEiDDwcNppMWlQ==", "dev": true, "license": "MIT", "funding": { @@ -10620,16 +10625,16 @@ } }, "node_modules/@storybook/core": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.5.2.tgz", - "integrity": "sha512-rCOpXZo2XbdKVnZiv8oC9FId/gLkStpKGGL7hhdg/RyjcyUyTfhsvaf7LXKZH2A0n/UpwFxhF3idRfhgc1XiSg==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.6.12.tgz", + "integrity": "sha512-t+ZuDzAlsXKa6tLxNZT81gEAt4GNwsKP/Id2wluhmUWD/lwYW0uum1JiPUuanw8xD6TdakCW/7ULZc7aQUBLCQ==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf": "0.1.12", + "@storybook/theming": "8.6.12", "better-opn": "^3.0.2", "browser-assert": "^1.2.1", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", "esbuild-register": "^3.5.0", "jsdoc-type-pratt-parser": "^4.0.0", "process": "^0.11.10", @@ -10652,9 +10657,9 @@ } }, "node_modules/@storybook/core-webpack": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.5.2.tgz", - "integrity": "sha512-r+s3zNojxl370CCCmvj0A+N27fW6zjRODQ7jsHWGSQzTDIz5Vj68rJBIOffr/27nN9r/JtbXbwxuO2UfqMqcqA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.6.12.tgz", + "integrity": "sha512-TiE+KOm0hxb/p0JxeGHKxqTNX+xnTOFsBh6uloCSuvodutJ5pR/XpxKVxwo1gtSc0Uq3qpgbMhW6qYlYQetnKA==", "dev": true, "license": "MIT", "dependencies": { @@ -10665,7 +10670,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/csf": { @@ -10679,9 +10684,9 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.5.2.tgz", - "integrity": "sha512-EEQ3Vc9qIUbLH8tunzN/GSoyP3zPpNPKegZooYQbgVqA582Pel4Jnpn4uxGaOWtFCLhXMETV05X/7chGZtEujA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.6.12.tgz", + "integrity": "sha512-6s8CnP1aoKPb3XtC0jRLUp8M5vTA8RhGAwQDKUsFpCC7g89JR9CaKs9FY2ZSzsNbjR15uASi7b3K8BzeYumYQg==", "dev": true, "license": "MIT", "dependencies": { @@ -10692,7 +10697,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/global": { @@ -10717,9 +10722,9 @@ } }, "node_modules/@storybook/instrumenter": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.5.2.tgz", - "integrity": "sha512-BbaUw9GXVzRg3Km95t2mRu4W6C1n1erjzll5maBaVe2+lV9MbCvBcdYwGUgjFNlQ/ETgq6vLfLOEtziycq/B6g==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.6.12.tgz", + "integrity": "sha512-VK5fYAF8jMwWP/u3YsmSwKGh+FeSY8WZn78flzRUwirp2Eg1WWjsqPRubAk7yTpcqcC/km9YMF3KbqfzRv2s/A==", "dev": true, "license": "MIT", "dependencies": { @@ -10731,13 +10736,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/manager-api": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.5.2.tgz", - "integrity": "sha512-Cn+oINA6BOO2GmGHinGsOWnEpoBnurlZ9ekMq7H/c1SYMvQWNg5RlELyrhsnyhNd83fqFZy9Asb0RXI8oqz7DQ==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.6.12.tgz", + "integrity": "sha512-O0SpISeJLNTQvhSBOsWzzkCgs8vCjOq1578rwqHlC6jWWm4QmtfdyXqnv7rR1Hk08kQ+Dzqh0uhwHx0nfwy4nQ==", "dev": true, "license": "MIT", "funding": { @@ -10749,9 +10754,9 @@ } }, "node_modules/@storybook/preview-api": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.5.2.tgz", - "integrity": "sha512-AOOaBjwnkFU40Fi68fvAnK0gMWPz6o/AmH44yDGsHgbI07UgqxLBKCTpjCGPlyQd5ezEjmGwwFTmcmq5dG8DKA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.6.12.tgz", + "integrity": "sha512-84FE3Hrs0AYKHqpDZOwx1S/ffOfxBdL65lhCoeI8GoWwCkzwa9zEP3kvXBo/BnEDO7nAfxvMhjASTZXbKRJh5Q==", "dev": true, "license": "MIT", "funding": { @@ -10763,9 +10768,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.5.2.tgz", - "integrity": "sha512-lt7XoaeWI8iPlWnWzIm/Wam9TpRFhlqP0KZJoKwDyHiCByqkeMrw5MJREyWq626nf34bOW8D6vkuyTzCHGTxKg==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.6.12.tgz", + "integrity": "sha512-51QvoimkBzYs8s3rCYnY5h0cFqLz/Mh0vRcughwYaXckWzDBV8l67WBO5Xf5nBsukCbWyqBVPpEQLww8s7mrLA==", "dev": true, "license": "MIT", "funding": { @@ -10775,19 +10780,18 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/test": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.5.2.tgz", - "integrity": "sha512-F5WfD75m25ZRS19cSxCzHWJ/rH8jWwIjhBlhU+UW+5xjnTS1cJuC1yPT/5Jw0/0Aj9zG1atyfBUYnNHYtsBDYQ==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.6.12.tgz", + "integrity": "sha512-0BK1Eg+VD0lNMB1BtxqHE3tP9FdkUmohtvWG7cq6lWvMrbCmAmh3VWai3RMCCDOukPFpjabOr8BBRLVvhNpv2w==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf": "0.1.12", "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.5.2", + "@storybook/instrumenter": "8.6.12", "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", @@ -10799,13 +10803,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/theming": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.5.2.tgz", - "integrity": "sha512-vro8vJx16rIE0UehawEZbxFFA4/VGYS20PMKP6Y6Fpsce0t2/cF/U9qg3jOzVb/XDwfx+ne3/V+8rjfWx8wwJw==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.6.12.tgz", + "integrity": "sha512-6VjZg8HJ2Op7+KV7ihJpYrDnFtd9D1jrQnUS8LckcpuBXrIEbaut5+34ObY8ssQnSqkk2GwIZBBBQYQBCVvkOw==", "dev": true, "license": "MIT", "funding": { @@ -10817,17 +10821,17 @@ } }, "node_modules/@storybook/web-components": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-8.5.2.tgz", - "integrity": "sha512-tjogJWTuf01957eLVPSuOlS0p/06uznIJj0xRjh8j3zxELIbTpY64dLKZ3i5PR9slGIJwoK8IVuy5B1jpD+PMA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-8.6.12.tgz", + "integrity": "sha512-j+609VT8abBlpV+tB/vqSRO/fKA1QpnKWlbE0JpolzmEbgla//pAZomPysoOnvTLL3lSX3conjiAAaTpwbjyLg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/components": "8.5.2", + "@storybook/components": "8.6.12", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.5.2", - "@storybook/preview-api": "8.5.2", - "@storybook/theming": "8.5.2", + "@storybook/manager-api": "8.6.12", + "@storybook/preview-api": "8.6.12", + "@storybook/theming": "8.6.12", "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0" }, @@ -10840,18 +10844,18 @@ }, "peerDependencies": { "lit": "^2.0.0 || ^3.0.0", - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@storybook/web-components-webpack5": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@storybook/web-components-webpack5/-/web-components-webpack5-8.5.2.tgz", - "integrity": "sha512-7msCQ1zjs21SJlA4DxwZn7nz/a4XR7Aj6QHxxL6KgIFkTtwE0iwdKHyVo6IExaSCtqqDsCiLTx9aVGYSekOoFA==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/@storybook/web-components-webpack5/-/web-components-webpack5-8.6.12.tgz", + "integrity": "sha512-DUrmxufzd9KZdPVaaYS5CG590EL/LM+wjber///sPtI0C/WdUUTCrg+2R5rYkX4f8bfqSH1y/MkJCiD+cW0TKg==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/builder-webpack5": "8.5.2", - "@storybook/web-components": "8.5.2" + "@storybook/builder-webpack5": "8.6.12", + "@storybook/web-components": "8.6.12" }, "engines": { "node": ">=18.0.0" @@ -10862,7 +10866,7 @@ }, "peerDependencies": { "lit": "^2.0.0 || ^3.0.0", - "storybook": "^8.5.2" + "storybook": "^8.6.12" } }, "node_modules/@szmarczak/http-timer": { @@ -12782,59 +12786,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/mocker": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.7.tgz", - "integrity": "sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/spy": "3.0.7", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.7.tgz", - "integrity": "sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tinyspy": "^3.0.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker/node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, "node_modules/@vitest/pretty-format": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", @@ -12848,114 +12799,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.7.tgz", - "integrity": "sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/utils": "3.0.7", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.7.tgz", - "integrity": "sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/@vitest/utils": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.7.tgz", - "integrity": "sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/pretty-format": "3.0.7", - "loupe": "^3.1.3", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@vitest/snapshot": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.7.tgz", - "integrity": "sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/pretty-format": "3.0.7", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.7.tgz", - "integrity": "sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/@vitest/snapshot/node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@vitest/spy": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", @@ -15416,17 +15259,6 @@ "dev": true, "license": "(Apache-2.0 AND MIT)" }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -19372,17 +19204,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/expect-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", - "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/exponential-backoff": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", @@ -25730,13 +25551,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -30011,14 +29825,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -32810,14 +32616,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC", - "peer": true - }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -33228,14 +33026,6 @@ "node": ">=8" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -33255,14 +33045,6 @@ "node": ">= 0.6" } }, - "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/steno": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", @@ -33273,13 +33055,13 @@ } }, "node_modules/storybook": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.5.2.tgz", - "integrity": "sha512-pf84emQ7Pd5jBdT2gzlNs4kRaSI3pq0Lh8lSfV+YqIVXztXIHU+Lqyhek2Lhjb7btzA1tExrhJrgQUsIji7i7A==", + "version": "8.6.12", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.6.12.tgz", + "integrity": "sha512-Z/nWYEHBTLK1ZBtAWdhxC0l5zf7ioJ7G4+zYqtTdYeb67gTnxNj80gehf8o8QY9L2zA2+eyMRGLC2V5fI7Z3Tw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/core": "8.5.2" + "@storybook/core": "8.6.12" }, "bin": { "getstorybook": "bin/index.cjs", @@ -34261,22 +34043,6 @@ "dev": true, "license": "MIT" }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/tinyglobby": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", @@ -34294,17 +34060,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinypool": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", - "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, "node_modules/tinyrainbow": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", @@ -35891,30 +35646,6 @@ } } }, - "node_modules/vite-node": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.7.tgz", - "integrity": "sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.0", - "es-module-lexer": "^1.6.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -36345,191 +36076,6 @@ "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/vitest": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.7.tgz", - "integrity": "sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/expect": "3.0.7", - "@vitest/mocker": "3.0.7", - "@vitest/pretty-format": "^3.0.7", - "@vitest/runner": "3.0.7", - "@vitest/snapshot": "3.0.7", - "@vitest/spy": "3.0.7", - "@vitest/utils": "3.0.7", - "chai": "^5.2.0", - "debug": "^4.4.0", - "expect-type": "^1.1.0", - "magic-string": "^0.30.17", - "pathe": "^2.0.3", - "std-env": "^3.8.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinypool": "^1.0.2", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.7", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.7", - "@vitest/ui": "3.0.7", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest-axe": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vitest-axe/-/vitest-axe-0.1.0.tgz", - "integrity": "sha512-jvtXxeQPg8R/2ANTY8QicA5pvvdRP4F0FsVUAHANJ46YCDASie/cuhlSzu0DGcLmZvGBSBNsNuK3HqfaeknyvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.0.0", - "axe-core": "^4.4.2", - "chalk": "^5.0.1", - "dom-accessibility-api": "^0.5.14", - "lodash-es": "^4.17.21", - "redent": "^3.0.0" - }, - "peerDependencies": { - "vitest": ">=0.16.0" - } - }, - "node_modules/vitest-axe/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vitest/node_modules/@vitest/expect": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.7.tgz", - "integrity": "sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/spy": "3.0.7", - "@vitest/utils": "3.0.7", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/pretty-format": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.7.tgz", - "integrity": "sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/spy": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.7.tgz", - "integrity": "sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tinyspy": "^3.0.2" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/utils": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.7.tgz", - "integrity": "sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/pretty-format": "3.0.7", - "loupe": "^3.1.3", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/vitest/node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -37345,24 +36891,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", diff --git a/package.json b/package.json index b59397dd704..a485175997c 100644 --- a/package.json +++ b/package.json @@ -47,17 +47,17 @@ "@electron/rebuild": "3.7.2", "@lit-labs/signals": "0.1.2", "@ngtools/webpack": "18.2.12", - "@storybook/addon-a11y": "8.5.2", - "@storybook/addon-actions": "8.5.2", + "@storybook/addon-a11y": "8.6.12", + "@storybook/addon-actions": "8.6.12", "@storybook/addon-designs": "8.2.1", - "@storybook/addon-essentials": "8.5.2", - "@storybook/addon-interactions": "8.5.2", - "@storybook/addon-links": "8.5.2", - "@storybook/addon-themes": "8.5.2", - "@storybook/angular": "8.5.2", - "@storybook/manager-api": "8.5.2", - "@storybook/theming": "8.5.2", - "@storybook/web-components-webpack5": "8.5.2", + "@storybook/addon-essentials": "8.6.12", + "@storybook/addon-interactions": "8.6.12", + "@storybook/addon-links": "8.6.12", + "@storybook/addon-themes": "8.6.12", + "@storybook/angular": "8.6.12", + "@storybook/manager-api": "8.6.12", + "@storybook/theming": "8.6.12", + "@storybook/web-components-webpack5": "8.6.12", "@types/argon2-browser": "1.18.4", "@types/chrome": "0.0.306", "@types/firefox-webext-browser": "120.0.4", @@ -128,7 +128,7 @@ "rimraf": "6.0.1", "sass": "1.83.4", "sass-loader": "16.0.4", - "storybook": "8.5.2", + "storybook": "8.6.12", "style-loader": "4.0.0", "tailwindcss": "3.4.17", "ts-jest": "29.2.2", From 1f15e7a876b1479f1abf1f1757026a82fa6934d7 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 14:02:27 +0200 Subject: [PATCH 05/36] Autosync the updated translations (#14688) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/af/messages.json | 138 ++++------------- apps/web/src/locales/ar/messages.json | 138 ++++------------- apps/web/src/locales/az/messages.json | 138 ++++------------- apps/web/src/locales/be/messages.json | 138 ++++------------- apps/web/src/locales/bg/messages.json | 138 ++++------------- apps/web/src/locales/bn/messages.json | 138 ++++------------- apps/web/src/locales/bs/messages.json | 138 ++++------------- apps/web/src/locales/ca/messages.json | 138 ++++------------- apps/web/src/locales/cs/messages.json | 152 +++++-------------- apps/web/src/locales/cy/messages.json | 138 ++++------------- apps/web/src/locales/da/messages.json | 138 ++++------------- apps/web/src/locales/de/messages.json | 138 ++++------------- apps/web/src/locales/el/messages.json | 138 ++++------------- apps/web/src/locales/en_GB/messages.json | 138 ++++------------- apps/web/src/locales/en_IN/messages.json | 138 ++++------------- apps/web/src/locales/eo/messages.json | 138 ++++------------- apps/web/src/locales/es/messages.json | 138 ++++------------- apps/web/src/locales/et/messages.json | 138 ++++------------- apps/web/src/locales/eu/messages.json | 138 ++++------------- apps/web/src/locales/fa/messages.json | 138 ++++------------- apps/web/src/locales/fi/messages.json | 138 ++++------------- apps/web/src/locales/fil/messages.json | 138 ++++------------- apps/web/src/locales/fr/messages.json | 138 ++++------------- apps/web/src/locales/gl/messages.json | 138 ++++------------- apps/web/src/locales/he/messages.json | 138 ++++------------- apps/web/src/locales/hi/messages.json | 138 ++++------------- apps/web/src/locales/hr/messages.json | 166 ++++++--------------- apps/web/src/locales/hu/messages.json | 138 ++++------------- apps/web/src/locales/id/messages.json | 138 ++++------------- apps/web/src/locales/it/messages.json | 138 ++++------------- apps/web/src/locales/ja/messages.json | 138 ++++------------- apps/web/src/locales/ka/messages.json | 138 ++++------------- apps/web/src/locales/km/messages.json | 138 ++++------------- apps/web/src/locales/kn/messages.json | 138 ++++------------- apps/web/src/locales/ko/messages.json | 138 ++++------------- apps/web/src/locales/lv/messages.json | 142 +++++------------- apps/web/src/locales/ml/messages.json | 138 ++++------------- apps/web/src/locales/mr/messages.json | 138 ++++------------- apps/web/src/locales/my/messages.json | 138 ++++------------- apps/web/src/locales/nb/messages.json | 138 ++++------------- apps/web/src/locales/ne/messages.json | 138 ++++------------- apps/web/src/locales/nl/messages.json | 138 ++++------------- apps/web/src/locales/nn/messages.json | 138 ++++------------- apps/web/src/locales/or/messages.json | 138 ++++------------- apps/web/src/locales/pl/messages.json | 138 ++++------------- apps/web/src/locales/pt_BR/messages.json | 138 ++++------------- apps/web/src/locales/pt_PT/messages.json | 138 ++++------------- apps/web/src/locales/ro/messages.json | 138 ++++------------- apps/web/src/locales/ru/messages.json | 138 ++++------------- apps/web/src/locales/si/messages.json | 138 ++++------------- apps/web/src/locales/sk/messages.json | 138 ++++------------- apps/web/src/locales/sl/messages.json | 138 ++++------------- apps/web/src/locales/sr/messages.json | 138 ++++------------- apps/web/src/locales/sr_CS/messages.json | 138 ++++------------- apps/web/src/locales/sv/messages.json | 138 ++++------------- apps/web/src/locales/te/messages.json | 138 ++++------------- apps/web/src/locales/th/messages.json | 138 ++++------------- apps/web/src/locales/tr/messages.json | 138 ++++------------- apps/web/src/locales/uk/messages.json | 180 +++++++---------------- apps/web/src/locales/vi/messages.json | 138 ++++------------- apps/web/src/locales/zh_CN/messages.json | 138 ++++------------- apps/web/src/locales/zh_TW/messages.json | 138 ++++------------- 62 files changed, 2028 insertions(+), 6616 deletions(-) diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 7ce9afe7c3e..24171cff411 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "U huidige organisasie het ’n beleid wat u nie toelaat om deel te neem aan meer as een organisasie nie. Kontak u organisasie se beheerders of teken aan met’n ander Bitwarden-rekening." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Verwyder gebruikers" - }, - "revokeUsers": { - "message": "Herroep gebruikers" - }, - "restoreUsers": { - "message": "Stel gebruikers terug" - }, "error": { "message": "Fout" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Deur ’n domein te koppel kan lede die SSO-identifikasieveld tydens aantekening met SSO oorslaan." }, - "verifyDomain": { - "message": "Verifieer domein" - }, - "reverifyDomain": { - "message": "Herverifieer domein" - }, "copyDnsTxtRecord": { "message": "Kopieer DNS TXT-rekord" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopieer en plak die TXT-rekord in u DNS-verskaffer." }, - "domainNameInputHint": { - "message": "Voorbeeld: mydomein.com. U moet subdomeine afsonderlik verifieer." - }, - "automaticDomainVerification": { - "message": "Outomatiese domeinverifikasie" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden wat gedurende die eerste 72 uur drie maal probeer om die domein te verifieer. As die domein nie geverifieer kan word nie, gaan die DNS-rekord in u gasheer na en verifieer dit handmatig. Die domein word binne 7 dae verwyder uit u organisasie as die nie geverifieer is nie" - }, - "invalidDomainNameMessage": { - "message": "Toevoer is ’n ongeldige formaat. Formaat: mydomein.com. U moet subdomeine afsonderlik verifieer." - }, "removeDomain": { "message": "Verwyder domein" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domein is bewaar" }, - "domainVerified": { - "message": "Domein is geverifieer" - }, "duplicateDomainError": { "message": "U kan nie twee maal dieselfde domein opeis nie." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nie geverifieer. Gaan u DNS-rekord na.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Geverifieer" - }, - "domainStatusUnverified": { - "message": "Ongeverifieer" - }, "domainNameTh": { "message": "Naam" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ geverifieer", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ nie geverifieer", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index 9d5ab34b696..4c1218a5e6d 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "خطأ" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index ff9ef42dece..3857fd936aa 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Hazırkı təşkilatınızın, bir neçə təşkilata qoşulmasına icazə verməyən bir siyasəti var. Lütfən təşkilat adminləri ilə əlaqə saxlayın və ya fərqli bir Bitwarden hesabı ilə qeydiyyatdan keçin." }, - "singleOrgPolicyWarning": { - "message": "Sahib və ya administrator olmayan və hal-hazırda başqa bir təşkilatın üzvü olan istifadəçilər təşkilatınızdan çıxarılacaq." - }, "singleOrgPolicyMemberWarning": { "message": "Uyumlu olmayan üzvlər, digər bütün təşkilatları tərk edənə qədər rədd edilmiş statusa daxil ediləcək. Administratorlar azaddır və uyum təmin edildikdən sonra üzvləri bərpa edə bilər." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Barmaq izi ifadəsi:" }, - "removeUsers": { - "message": "İstifadəçiləri çıxart" - }, - "revokeUsers": { - "message": "İstifadəçiləri ləğv et" - }, - "restoreUsers": { - "message": "İstifadəçiləri bərpa et" - }, "error": { "message": "Xəta" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Bir domenin bağlantı qurması, üzvlərin SSO ilə Giriş etməsi zamanı SSO identifikatoru xanasını ötürməsinə icazə verir." }, - "verifyDomain": { - "message": "Domeni doğrula" - }, - "reverifyDomain": { - "message": "Domeni yenidən doğrula" - }, "copyDnsTxtRecord": { "message": "DNS TXT qeydini kopyala" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "TXT qeydini DNS Provayderinizə kopyalayıb yapışdırın." }, - "domainNameInputHint": { - "message": "Nümunə: mydomain.com. Alt domenlərin doğrulanması üçün ayrıca girişlər tələb olunur." - }, - "automaticDomainVerification": { - "message": "Avtomatik Domen Doğrulaması" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden, ilk 72 saat ərzində domeni 3 dəfə doğrulamağa çalışacaq. Əgər domen doğrulana bilməsə, \"host\"unuzdakı DNS qeydini yoxlayıb əllə doğrulayın. Domen doğrulanmasa, 7 gün ərzində təşkilatınızdan silinəcək" - }, - "invalidDomainNameMessage": { - "message": "Giriş, yararlı bir format deyil. Format: mydomain.com. Alt domenlərin doğrulanması üçün ayrıca girişlər tələb olunur." - }, "removeDomain": { "message": "Domeni sil" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domen saxlanıldı" }, - "domainVerified": { - "message": "Domen doğrulandı" - }, "duplicateDomainError": { "message": "Eyni domeni iki dəfə tələb edə bilməzsiniz." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ doğrulanmadı. DNS qeydinizi yoxlayın.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Doğrulandı" - }, - "domainStatusUnverified": { - "message": "Doğrulanmadı" - }, "domainNameTh": { "message": "Ad" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ doğrulandı", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ doğrulanmadı", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Bu əməliyyat üçün doğrulama tələb olunur. Davam etmək üçün bir PIN təyin edin." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Fakturanı \"Provayder Portalı\"ndan idarə et" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Ödənişsiz Bitwarden sınağınızı qurmağa davam edin" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Ödənişsiz Bitwarden Parol Meneceri sınağınızı qurmağa davam edin" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Ödənişsiz Bitwarden Sirr Meneceri sınağınızı qurmağa davam edin" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Vacib bildiriş" - }, - "setupTwoStepLogin": { - "message": "İki addımlı girişi qur" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden, 2025-ci ilin Fevral ayından etibarən yeni cihazlardan gələn girişləri doğrulamaq üçün hesabınızın e-poçtuna bir kod göndərəcək." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Hesabınızı qorumaq üçün alternativ bir yol kimi iki addımlı girişi qura və ya e-poçtunuzu müraciət edə biləcəyiniz e-poçtla dəyişdirə bilərsiniz." - }, - "remindMeLater": { - "message": "Daha sonra xatırlat" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "$EMAIL$ e-poçtunuza güvənli şəkildə müraciət edə bilirsiniz?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Xeyr, edə bilmirəm" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Bəli, e-poçtuma güvənli şəkildə müraciət edə bilirəm" - }, - "turnOnTwoStepLogin": { - "message": "İki addımlı girişi işə sal" - }, - "changeAcctEmail": { - "message": "Hesabın e-poçtunu dəyişdir" - }, "removeMembers": { "message": "Üzvləri çıxart" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Avto-doldurma ilə vaxta qənaət edin" }, - "newLoginNudgeBody": { - "message": "Bir veb sayt daxil edin ki, bu giriş məlumatları avto-doldurma təklifi kimi görünsün." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Problemsiz onlayn ödəniş" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Gəlişdirici dostu SSH müraciəti" }, - "newSshNudgeBody": { - "message": "Açarlarınızı saxlayın və sürətli, şifrələnmiş kimlik doğrulama üçün SSH agentinə bağlayın." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Yenidən başlat" diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 1fd37f5b819..5591fb571d2 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Ваша бягучая арганізацыя мае палітыку, якая не дазваляе вам далучацца да больш чым да адной арганізацыі. Калі ласка, звяжыцеся з адміністратарам вашай арганізацыі або ўвайдзіце пад іншым уліковым запісам Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "Удзельнікі арганізацыі, якія не з'яўляюцца ўладальнікамі або адміністратарамі і ўжо ўваходзяць у іншую арганізацыю будуць выдалены з вашай арганізацыі." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Выдаліць карыстальнiкаў" - }, - "revokeUsers": { - "message": "Адклікаць карыстальнікаў" - }, - "restoreUsers": { - "message": "Аднавіць карыстальнікаў" - }, "error": { "message": "Памылка" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Падлучэнне дамена дазваляе ўдзельнікам прапускаць поле з ідэнтыфікатара SSO падчас аўтарызацыі праз SSO." }, - "verifyDomain": { - "message": "Праверыць дамен" - }, - "reverifyDomain": { - "message": "Паўторна праверыць дамен" - }, "copyDnsTxtRecord": { "message": "Капіяваць запіс DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Капіяваць і ўставіць запіс TXT у поле вашага пастаўшчыка паслуг DNS." }, - "domainNameInputHint": { - "message": "Прыклад: mydomain.com. Для праверкі паддаменаў неабходны асобныя запісы." - }, - "automaticDomainVerification": { - "message": "Аўтаматычная праверка дамена" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden паспрабуе праверыць дамен 3 разы на працягу першых 72 гадзін. Калі гэта не атрымліваецца зрабіць, праверце запіс DNS і выканайце дадзеную аперацыю ўручную. Дамен будзе выдалены з вашай арганізацыі праз 7 дзён, калі яго праверка не будзе завершана" - }, - "invalidDomainNameMessage": { - "message": "Няправільны фармат уводу. Слушны фармат: mydomain.com. Для праверкі паддаменаў неабходны асобныя запісы." - }, "removeDomain": { "message": "Выдаліць дамен" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Дамен захаваны" }, - "domainVerified": { - "message": "Дамен правераны" - }, "duplicateDomainError": { "message": "Нельга атрымаць адзін і той жа дамен двойчы." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ не правераны. Праверце ваш запіс DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Правераны" - }, - "domainStatusUnverified": { - "message": "Неправераны" - }, "domainNameTh": { "message": "Назва" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "Дамен $DOMAIN$ правераны", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "Дамен $DOMAIN$ неправераны", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index dd869fab69e..209ebe5da0f 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Вашата настояща организация има политика, която не позволява да участвате в повече от една организация. Моля свържете се с администратора на организацията или се впишете с друг Bitwarden потребител." }, - "singleOrgPolicyWarning": { - "message": "Членовете, които не са собственици или администратори и са членове на други организации ще бъдат премахнати от тази организация." - }, "singleOrgPolicyMemberWarning": { "message": "На членовете, които не отговарят на това условие, ще бъдат отнети правомощията, докато не напуснат всички останали организации. Администраторите не подлежат на това ограничение, така че те ще могат да възстановяват правомощията на членовете, след като отговорят на условието." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Уникална фраза:" }, - "removeUsers": { - "message": "Премахване на потребителите" - }, - "revokeUsers": { - "message": "Отнемане на достъпа на потребители" - }, - "restoreUsers": { - "message": "Възстановяване на достъпа на потребители" - }, "error": { "message": "Грешка" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Свързването на домейн позволява на членовете да пропускат полето за идентификатор за еднократно удостоверяване по време на вписване чрез този метод." }, - "verifyDomain": { - "message": "Потвърждаване на домейна" - }, - "reverifyDomain": { - "message": "Повторно потвърждаване на домейна" - }, "copyDnsTxtRecord": { "message": "Копирайте записа TXT от DNS" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Копирайте и поставете записа TXT в системата на своя доставчик на DNS." }, - "domainNameInputHint": { - "message": "Пример: mydomain.com. Под-домейните изискват всеки отделен запис да бъде потвърден." - }, - "automaticDomainVerification": { - "message": "Автоматично потвърждаване на домейн" - }, - "automaticDomainVerificationProcess": { - "message": "Битуорден ще се опита да потвърди домейна 3 пъти през първите 72 часа. Ако той не може да бъде потвърден, проверете записа за DNS в сървъра си и направете потвърждаването ръчно. Домейнът ще бъде премахнат от организацията Ви след 7 дни, ако не бъде потвърден." - }, - "invalidDomainNameMessage": { - "message": "Неправилен формат. Пример: mydomain.com. Под-домейните изискват всеки отделен запис да бъде потвърден." - }, "removeDomain": { "message": "Премахване на домейна" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Домейнът е запазен" }, - "domainVerified": { - "message": "Домейнът е потвърден" - }, "duplicateDomainError": { "message": "Не може да заявите един и същ домейн повече от веднъж." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "Домейнът $DOMAIN$ не е потвърден. Проверете записа в DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Потвърден" - }, - "domainStatusUnverified": { - "message": "Непотвърден" - }, "domainNameTh": { "message": "Име" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "Домейнът $DOMAIN$ е потвърден", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "Домейнът $DOMAIN$ не е потвърден", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Това действие изисква потвърждаване. Задайте ПИН, за да продължите." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Управление на плащанията от Портала за доставчици" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Продължете настройването на безплатния пробен период на Буторден" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Продължете настройването на безплатния пробен период на Управлението на пароли на Буторден" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Продължете настройването на безплатния пробен период на Управлението на тайни на Буторден" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Важно съобщение" - }, - "setupTwoStepLogin": { - "message": "Настройте двустепенно удостоверяване" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Битуорден ще изпрати код до е-пощата Ви, за потвърждаване на вписването от нови устройства. Това ще започне от февруари 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Можете да настроите двустепенно удостоверяване, като различен метод на защита, или ако е необходимо да промените е-пощата си с такава, до която имате достъп." - }, - "remindMeLater": { - "message": "Напомнете ми по-късно" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Имате ли сигурен достъп до е-пощата си – $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Не, нямам" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, имам достъп до е-пощата си" - }, - "turnOnTwoStepLogin": { - "message": "Включване на двустепенното удостоверяване" - }, - "changeAcctEmail": { - "message": "Промяна на е-пощата" - }, "removeMembers": { "message": "Премахване на членовете" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Спестете време с автоматично попълване" }, - "newLoginNudgeBody": { - "message": "Добавете уеб сайт, за да може тези данни за вписване да се появяват като предложение за автоматично попълване." + "newLoginNudgeBodyOne": { + "message": "Добавете", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "уеб сайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": ", за да може тези данни за вписване да се появяват като предложение за автоматично попълване.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Безпроблемни плащания" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Улеснен достъп за разработчици чрез SSH" }, - "newSshNudgeBody": { - "message": "Съхранявайте ключове и използвайте връзка чрез SSH агента, за бързо и шифровано удостоверяване." + "newSshNudgeBodyOne": { + "message": "Съхранявайте ключове и използвайте връзка чрез SSH агента, за бързо и шифровано удостоверяване.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Научете повече относно SSH-агента", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Повторно пускане" diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index f756786aa3c..2d2e7d580d2 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index fac169f73c0..e1a180724fb 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index 62cb057b70c..41d6841f117 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "La vostra organització actual té una política que no us permet unir-vos a més d'una organització. Poseu-vos en contacte amb els administradors de la vostra organització o registreu-vos des d’un altre compte de Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "Els membres que no siguen propietaris ni administradors i que ja siguen membres d'una altra organització se suprimiran de la vostra organització." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Suprimeix usuaris" - }, - "revokeUsers": { - "message": "Revoca usuaris" - }, - "restoreUsers": { - "message": "Restaura usuaris" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "La connexió d'un domini permet als membres ometre el camp d'identificador de SSO durant l'inici de sessió amb aquest." }, - "verifyDomain": { - "message": "Verifica domini" - }, - "reverifyDomain": { - "message": "Torna a verificar el domini" - }, "copyDnsTxtRecord": { "message": "Copia registre DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copieu i enganxeu el registre TXT al vostre proveïdor de DNS." }, - "domainNameInputHint": { - "message": "Exemple: el meudomini.com. Els subdominis requereixen que es verifiquen entrades separades." - }, - "automaticDomainVerification": { - "message": "Verificació automàtica de dominis" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden intentarà verificar el domini 3 vegades durant les primeres 72 hores. Si el domini no es pot verificar, comproveu el registre DNS del vostre amfitrió i verifiqueu-lo manualment. El domini s'eliminarà de la vostra organització en 7 dies si no es verifica" - }, - "invalidDomainNameMessage": { - "message": "L'entrada no és un format vàlid. Format: el meudomini.com. Els subdominis requereixen que es verifiquen entrades separades." - }, "removeDomain": { "message": "Suprimeix domini" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domini guardat" }, - "domainVerified": { - "message": "Domini verificat" - }, "duplicateDomainError": { "message": "No pots reclamar el mateix domini dues vegades." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ no verificat. Comproveu el vostre registre DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verificat" - }, - "domainStatusUnverified": { - "message": "Sense verificar" - }, "domainNameTh": { "message": "Nom" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verificat", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ sense verificar", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Es requereix verificació per a aquesta acció. Estableix un PIN per continuar." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Gestioneu la facturació des del portal de proveïdors" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 9d416637faf..f0173e369af 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Vaše aktuální organizace má pravidla, která Vám nedovolují připojit se k více než jedné organizaci. Obraťte se na administrátory organizace nebo se zaregistrujte z jiného účtu na Bitwardenu." }, - "singleOrgPolicyWarning": { - "message": "Členové organizace, kteří nejsou vlastníky nebo administrátory a jsou již členy jiné organizace, budou odebrání z Vaší organizace." - }, "singleOrgPolicyMemberWarning": { "message": "Nevyhovující členové budou zařazeni do statusu odvolaných členů, dokud neopustí všechny ostatní organizace. Správci jsou osvobozeni a mohou obnovit členy, jakmile je splněna podmínka shody." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fráze otisku prstu:" }, - "removeUsers": { - "message": "Odebrat uživatele" - }, - "revokeUsers": { - "message": "Odvolat uživatele" - }, - "restoreUsers": { - "message": "Obnovit uživatele" - }, "error": { "message": "Chyba" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Připojení domény umožňuje členům přeskočit pole identifikátoru SSO během přihlašování pomocí SSO." }, - "verifyDomain": { - "message": "Ověřit doménu" - }, - "reverifyDomain": { - "message": "Znovu ověřit doménu" - }, "copyDnsTxtRecord": { "message": "Kopírovat TXT záznam DNS" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Zkopírujte a vložte TXT záznam do poskytovatele DNS." }, - "domainNameInputHint": { - "message": "Příklad: mydomain.com. Poddomény vyžadují samostatné záznamy, které je třeba ověřit." - }, - "automaticDomainVerification": { - "message": "Automatické ověření domény" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden se pokusí ověřit doménu třikrát během prvních 72 hodin. Pokud doménu nelze ověřit, zkontrolujte záznam DNS v hostitelském počítači a ověřte ji ručně. Pokud se doména nepodaří ověřit, bude z Vaší organizace odebrána do 7 dnů." - }, - "invalidDomainNameMessage": { - "message": "Vstup není platný formát. Příklad: mydomain.com. Poddomény vyžadují samostatné záznamy, které je třeba ověřit." - }, "removeDomain": { "message": "Odebrat doménu" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Doména byla uložena" }, - "domainVerified": { - "message": "Doména byla ověřena" - }, "duplicateDomainError": { "message": "Nemůžete nárokovat stejnou doménu dvakrát." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nebyla ověřena. Zkontrolujte Váš DNS záznam.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Ověřeno" - }, - "domainStatusUnverified": { - "message": "Neověřeno" - }, "domainNameTh": { "message": "Název" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ byla ověřena", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ nebyla ověřena", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Pro tuto akci je vyžadováno ověření. Nastavte PIN kód pro pokračování." }, @@ -8436,31 +8370,31 @@ "message": "Důvěryhodná zařízení" }, "memberDecryptionOptionTdeDescPart1": { - "message": "Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The", + "message": "Při přihlašování pomocí SSO nebudou členové potřebovat hlavní heslo. Hlavní heslo je nahrazeno šifrovacím klíčem uloženým v zařízení, čímž se toto zařízení stane důvěryhodným. Důvěryhodné bude první zařízení, na kterém si člen vytvoří účet a do kterého se přihlásí. Nová", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescLink1": { - "message": "single organization", + "message": "zařízení budou muset být schválena", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescPart2": { - "message": "policy,", + "message": "stávajícím důvěryhodným zařízením", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescLink2": { - "message": "SSO required", + "message": "nebo správcem. Při", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescPart3": { - "message": "policy, and", + "message": "použití této možnosti se zapne zásada jednotné organizace, zásada", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescLink3": { - "message": "account recovery administration", + "message": "požadovaného SSO a ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescPart4": { - "message": "policy will turn on when this option is used.", + "message": "zásada správy obnovení účtu.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "orgPermissionsUpdatedMustSetPassword": { @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Spravovat fakturaci z portálu poskytovatele" }, + "continueSettingUp": { + "message": "Pokračovat v nastavení Bitwardenu" + }, "continueSettingUpFreeTrial": { "message": "Pokračujte v nastavení zkušební verze aplikace Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Pokračujte v nastavení Správce hesel Bitwarden" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Pokračujte v nastavení bezplatného zkušebního období Správce hesel Bitwarden" }, + "continueSettingUpSecretsManager": { + "message": "Pokračujte v nastavení Správce tajných klíčů Bitwarden" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Pokračujte v nastavení bezplatného zkušebního období Správce tajných klíčů Bitwarden" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Důležité upozornění" - }, - "setupTwoStepLogin": { - "message": "Nastavit dvoufázové přihlášení" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden odešle kód na e-mail Vašeho účtu pro ověření přihlášení z nových zařízení počínaje únorem 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Dvoufázové přihlášení můžete nastavit jako alternativní způsob ochrany Vašeho účtu nebo změnit svůj e-mail na ten, k němuž můžete přistupovat." - }, - "remindMeLater": { - "message": "Připomenout později" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Máte spolehlivý přístup ke svému e-mailu $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ne, nemám" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ano, ke svému e-mailu mám přístup" - }, - "turnOnTwoStepLogin": { - "message": "Zapnout dvoufázové přihlášení" - }, - "changeAcctEmail": { - "message": "Změnit e-mail účtu" - }, "removeMembers": { "message": "Odebrat členy" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Ušetřete čas s automatickým vyplňováním" }, - "newLoginNudgeBody": { - "message": "Zahrne webovou stránku, takže se toto přihlášení objeví jako návrh automatického vyplňování." + "newLoginNudgeBodyOne": { + "message": "Zahrne", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "webovou stránku, ", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "takže se toto přihlášení objeví jako návrh automatického vyplňování.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Bezproblémová online pokladna" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Přístup SSH pro vývojáře" }, - "newSshNudgeBody": { - "message": "Uložte své klíče a připojte se k SSH agentovi pro rychlé a šifrované ověření." + "newSshNudgeBodyOne": { + "message": "Uložte své klíče a připojte se k SSH agentovi pro rychlé a šifrované ověření.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Další informace o SSH agentovi", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restartovat" diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 50af6eab1c3..fc21c28d333 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index 91f7778c41e..8c2d2837572 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Den nuværende organisationspolitik tillader dig ikke at deltage i mere end én organisation. Kontakt organisationens admins eller benyt en anden Bitwarden-konto under tilmelding." }, - "singleOrgPolicyWarning": { - "message": "Organisationsmedlemmer, undtagen ejere eller admins, som allerede er medlem af en anden organisation, fjernes fra organisationen." - }, "singleOrgPolicyMemberWarning": { "message": "Ikke-overholdende medlemmer placeres i privilegie-ophævet status, indtil de forlader alle øvrige organisationer. Administratorer er fritaget og kan gendanne medlemmer, når overholdelse er opfyldt." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Fjern brugere" - }, - "revokeUsers": { - "message": "Ophæv status som bruger" - }, - "restoreUsers": { - "message": "Gendan status som bruger" - }, "error": { "message": "Fejl" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Tilslutning af et domæne lader medlemmer overspringe SSO-identifikationsfeltet under SSO-baseret indlogning." }, - "verifyDomain": { - "message": "Bekræft domæne" - }, - "reverifyDomain": { - "message": "Genbekræft domæne" - }, "copyDnsTxtRecord": { "message": "Kopiér DNS TXT-post" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopiér og indsæt TXT-posten i din DNS-udbyder." }, - "domainNameInputHint": { - "message": "Eks.: mitdomaene.dk. Underdomæner kræver at separate poster bekræftes." - }, - "automaticDomainVerification": { - "message": "Automatisk Domænebekræftelse" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden vil forsøge at bekræfte domænet 3 gange i løbet af de første 72 timer. Kan domænet ikke bekræftes, så tjek DNS-posten på værten og bekræft manuelt. Såfremt ubekræftet efter 7 dage, fjernes domænet fra organisationen" - }, - "invalidDomainNameMessage": { - "message": "Input er ikke i et gyldigt format. Format: mitdomaene.dk. Underdomæner kræver at separate poster bekræftes." - }, "removeDomain": { "message": "Fjern domæne" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domæne gemt" }, - "domainVerified": { - "message": "Domæne bekræftet" - }, "duplicateDomainError": { "message": "Der kan ikke gøres krav på det samme domæne to gange." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ ikke bekræftet. Tjek DNS-posten.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Bekræftet" - }, - "domainStatusUnverified": { - "message": "Ikke-bekræftet" - }, "domainNameTh": { "message": "Navn" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ bekræftet", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ ikke bekræftet", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Bekræftelse kræves for denne handling. Opsæt en PIN-kode for at fortsætte." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Håndter fakturering via udbyderportalen" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Fortsæt opsætningen af den gratis Bitwarden-prøveperiode" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Fortsæt opsætningen af den gratis Bitwarden Password Manager-prøveperiode" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Fortsæt opsætningen af den gratis Bitwarden Secrets Manager-prøveperiode" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Vigtig notits" - }, - "setupTwoStepLogin": { - "message": "Opsæt totrins-login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Startende i februar 2025, sender Bitwarden en kode til kontoe-mailadressen for at bekræfte logins fra nye enheder." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Man kan opsætte totrins-login som en alternativ måde at beskytte sin konto på eller ændre sin e-mail til en, man kan tilgå." - }, - "remindMeLater": { - "message": "Påmind senere" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Er der pålidelig adgang til e-mailadressen, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nej, muligvis ikke" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, e-mailadressen kan pålideligt tilgås" - }, - "turnOnTwoStepLogin": { - "message": "Slå totrins-login til" - }, - "changeAcctEmail": { - "message": "Skift kontoe-mailadresse" - }, "removeMembers": { "message": "Fjern medlemmer" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index b8b41df6a01..0322bbeab13 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Deine aktuelle Organisation hat eine Richtlinie, die es dir nicht erlaubt, mehr als einer Organisation beizutreten. Bitte kontaktiere die Administratoren deiner Organisation oder melden dich mit einem anderen Bitwarden-Konto an." }, - "singleOrgPolicyWarning": { - "message": "Organisationsmitglieder, die nicht Eigentümer oder Administratoren sind und bereits Mitglied einer anderen Organisation sind, werden aus deiner Organisation entfernt." - }, "singleOrgPolicyMemberWarning": { "message": "Nicht-konforme Mitglieder werden in den Widerrufen-Status versetzt, bis sie alle anderen Organisationen verlassen. Administratoren sind ausgenommen und können Mitglieder wieder aufnehmen, sobald die Anforderungen erfüllt sind." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerabdruck-Phrase:" }, - "removeUsers": { - "message": "Benutzer entfernen" - }, - "revokeUsers": { - "message": "Benutzer widerrufen" - }, - "restoreUsers": { - "message": "Benutzer wiederherstellen" - }, "error": { "message": "Fehler" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Durch das Verbinden einer Domain können Mitglieder das SSO-Kennungsfeld während der Anmeldung mit SSO überspringen." }, - "verifyDomain": { - "message": "Domain verifizieren" - }, - "reverifyDomain": { - "message": "Domain erneut verifizieren" - }, "copyDnsTxtRecord": { "message": "DNS-TXT-Eintrag kopieren" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopiere den TXT-Eintrag und füge ihn bei deinem DNS-Provider ein." }, - "domainNameInputHint": { - "message": "Beispiel: mydomain.com. Subdomains erfordern separate Einträge zur Verifizierung." - }, - "automaticDomainVerification": { - "message": "Automatische Domain-Verifizierung" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden wird in den ersten 72 Stunden 3 Mal versuchen, die Domain zu überprüfen. Wenn die Domain nicht verifiziert werden kann, überprüfe den DNS-Eintrag auf deinem Host und verifiziere sie manuell. Die Domain wird in 7 Tagen aus deiner Organisation entfernt, wenn sie nicht verifiziert ist" - }, - "invalidDomainNameMessage": { - "message": "Eingabe ist kein gültiges Format. Format: mydomain.com. Subdomains erfordern separate Einträge, um verifiziert zu werden." - }, "removeDomain": { "message": "Domain entfernen" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain gespeichert" }, - "domainVerified": { - "message": "Domain verifiziert" - }, "duplicateDomainError": { "message": "Du kannst die gleiche Domain nicht zweimal beanspruchen." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nicht verifiziert. Überprüfe deinen DNS-Eintrag.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verifiziert" - }, - "domainStatusUnverified": { - "message": "Nicht verifiziert" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verifiziert", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ nicht verifiziert", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Für diese Aktion ist eine Verifizierung erforderlich. Lege eine PIN fest, um fortzufahren." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Rechnungen über das Anbieter-Portal verwalten" }, + "continueSettingUp": { + "message": "Setze die Einrichtung von Bitwarden fort" + }, "continueSettingUpFreeTrial": { "message": "Setze die Einrichtung deiner kostenlosen Testversion von Bitwarden fort" }, + "continueSettingUpPasswordManager": { + "message": "Setze die Einrichtung des Bitwarden Passwort Managers fort" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Setze die Einrichtung deiner kostenlosen Testversion des Bitwarden Passwort Managers fort" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Setze die Einrichtung deiner kostenlosen Testversion des Bitwarden Secrets Managers fort" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Wichtiger Hinweis" - }, - "setupTwoStepLogin": { - "message": "Zwei-Faktor-Authentifizierung einrichten" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Ab Februar 2025 wird Bitwarden einen Code an deine Konto-E-Mail-Adresse senden, um Anmeldungen von neuen Geräten zu verifizieren." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Du kannst die Zwei-Faktor-Authentifizierung als eine alternative Methode einrichten, um dein Konto zu schützen, oder deine E-Mail-Adresse zu einer anderen ändern, auf die du zugreifen kannst." - }, - "remindMeLater": { - "message": "Erinnere mich später" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Hast du zuverlässigen Zugriff auf deine E-Mail-Adresse $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nein, habe ich nicht" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, ich kann zuverlässig auf meine E-Mails zugreifen" - }, - "turnOnTwoStepLogin": { - "message": "Zwei-Faktor-Authentifizierung aktivieren" - }, - "changeAcctEmail": { - "message": "E-Mail-Adresse des Kontos ändern" - }, "removeMembers": { "message": "Mitglieder entfernen" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" }, - "newLoginNudgeBody": { - "message": "Füge eine Website hinzu, damit diese Zugangsdaten als Auto-Ausfüllen-Vorschlag erscheinen." + "newLoginNudgeBodyOne": { + "message": "Füge eine", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "hinzu, damit diese Zugangsdaten als Auto-Ausfüllen-Vorschlag erscheinen.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Nahtlose Online-Kaufabwicklung" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Entwickler-freundlicher SSH-Zugriff" }, - "newSshNudgeBody": { - "message": "Speicher deine Schlüssel und verbinden dich mit dem SSH-Agenten für eine schnelle und verschlüsselte Authentifizierung." + "newSshNudgeBodyOne": { + "message": "Speicher deine Schlüssel und verbinden dich mit dem SSH-Agenten für eine schnelle und verschlüsselte Authentifizierung.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Erfahre mehr über den SSH-Agenten", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Neustarten" diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 543dd8b1654..5c4bd9603cb 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Ο τρέχων οργανισμός σας έχει μια πολιτική που δεν σας επιτρέπει να συμμετάσχετε σε περισσότερους από έναν οργανισμούς. Επικοινωνήστε με τους διαχειριστές του οργανισμού σας ή εγγραφείτε από διαφορετικό λογαριασμό Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "Τα μέλη του οργανισμού που δεν είναι κάτοχοι ή διαχειριστές και είναι ήδη μέλη άλλου οργανισμού θα αφαιρεθούν από τον οργανισμό σας." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Αφαίρεση Χρηστών" - }, - "revokeUsers": { - "message": "Ανάκληση χρηστών" - }, - "restoreUsers": { - "message": "Επαναφορά χρηστών" - }, "error": { "message": "Σφάλμα" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Επαλήθευση τομέα" - }, - "reverifyDomain": { - "message": "Επανάληψη επαλήθευσης τομέα" - }, "copyDnsTxtRecord": { "message": "Αντιγραφή εγγραφής DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Αντιγράψτε και επικολλήστε το αρχείο TXT στον πάροχο DNS σας." }, - "domainNameInputHint": { - "message": "Παράδειγμα: mydomain.com. Οι υπο-τομείς απαιτούν την επαλήθευση ξεχωριστών καταχωρήσεων." - }, - "automaticDomainVerification": { - "message": "Αυτόματη Επαλήθευση Τομέα" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Αφαίρεση τομέα" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Ο τομέας αποθηκεύτηκε" }, - "domainVerified": { - "message": "Ο τομέας επαληθεύτηκε" - }, "duplicateDomainError": { "message": "Δεν μπορείτε να διεκδικήσετε τον ίδιο τομέα δύο φορές." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Επαληθευμένος" - }, - "domainStatusUnverified": { - "message": "Μη επαληθευμένος" - }, "domainNameTh": { "message": "Όνομα" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "Το $DOMAIN$ επαληθεύτηκε", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "Το $DOMAIN$ δεν επαληθεύτηκε", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Απαιτείται επαλήθευση για αυτήν την ενέργεια. Ορίστε ένα PIN για να συνεχίσετε." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Συνεχίστε τη ρύθμιση της δωρεάν δοκιμής σας στο Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Συνεχίστε τη ρύθμιση της δωρεάν δοκιμής σας στο Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Συνεχίστε τη ρύθμιση της δωρεάν δοκιμής σας στο Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index 4ce7b2e43b4..d3ba58adc9c 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organisation has a policy that does not allow you to join more than one organisation. Please contact your organisation admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organisation members who are not owners or admins and are already a member of another organisation will be removed from your organisation." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organisations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organisation in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index 79861af73d5..f94da24ae4b 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not Owners or Administrators and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organisations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove Users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organisation in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 57ac4060b37..8cb350ca8d7 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Via nuna organizo havas politikon, kiu ne permesas vin aliĝi al pli ol unu organizo. Bonvolu kontakti administrantojn de via organizo aŭ registriĝi de alia Bitwarden-konto." }, - "singleOrgPolicyWarning": { - "message": "Organizaj membroj, kiuj ne estas Posedantoj aŭ Administrantoj kaj jam estas membro de alia organizo, estos forigitaj de via organizo." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Eraro" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index 372aa039609..e0d864a4041 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Su organización actual tiene una política que no le permite unirse a más de una organización. Póngase en contacto con los administradores de su organización o acceda desde una cuenta de Bitwarden diferente." }, - "singleOrgPolicyWarning": { - "message": "Los miembros de la organización que no son dueños o administradores y que ya son miembros de otra organización serán eliminados de su organización." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Eliminar usuarios" - }, - "revokeUsers": { - "message": "Revocar usuarios" - }, - "restoreUsers": { - "message": "Restaurar usuarios" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Conectar un dominio permite a los miembros omitir el campo identificador SSO durante el inicio de sesión con SSO." }, - "verifyDomain": { - "message": "Verificar dominio" - }, - "reverifyDomain": { - "message": "Reverificar dominio" - }, "copyDnsTxtRecord": { "message": "Copiar registro DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copia y pega el registro TXT en tu proveedor de DNS." }, - "domainNameInputHint": { - "message": "Ejemplo: mydomain.com. Los subdominios requieren entradas separadas para ser verificadas." - }, - "automaticDomainVerification": { - "message": "Verificación automática de dominio" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden intentará verificar el dominio 3 veces durante las primeras 72 horas. Si el dominio no puede ser verificado, compruebe el registro DNS en su host y verifique manualmente. El dominio se eliminará de su organización en 7 días si no se verifica" - }, - "invalidDomainNameMessage": { - "message": "Los datos inreoducidos no tienen un formato válido. Formato: midominio.com. Los subdominios requieren entradas separadas para ser verificadas." - }, "removeDomain": { "message": "Eliminar dominio" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Dominio guardado" }, - "domainVerified": { - "message": "Dominio verificado" - }, "duplicateDomainError": { "message": "No puedes reclamar el mismo dominio dos veces." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ no verificado. Compruebe su registro DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verificado" - }, - "domainStatusUnverified": { - "message": "No Verificado" - }, "domainNameTh": { "message": "Nombre" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verificado", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ no verificado", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index ee54e5f679e..d8e075ce3f9 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Sinu praeguse organisatsiooni poliitika kohaselt ei saa sa olla rohkem kui ühe organisatsiooni liige. Palun kontakteeru oma praeguse organisatsiooni administraatoritega või kasuta liitumiseks teist Bitwardeni kontot." }, - "singleOrgPolicyWarning": { - "message": "Sisselülitamisel eemaldatakse organisatsioonist liikmed, kes on juba mõne teise organisatsiooniga liitunud. See ei puuduta liikmeid, kelle staatus on Omanik või Administraator." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Kasutajate eemaldamine" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Viga" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index 94dfc875d93..e2a37a355f0 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Zure erakundeak erakunde batean baino gehiagotan saioa hastea ukatzen duen politika bat dauka. Jar zaitez harremanetan zure erakundeko administratzaileekin edo erregistratu beste Bitwarden kontu batean." }, - "singleOrgPolicyWarning": { - "message": "Jabe edo administratzaile ez diren eta beste erakunde bateko kide diren erakundeko kideak zure erakundetik kanporatuko dira." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Kendu erabiltzaileak" - }, - "revokeUsers": { - "message": "Ezeztatu erabiltzaileak" - }, - "restoreUsers": { - "message": "Berreskuratu erabiltzaileak" - }, "error": { "message": "Akatsa" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index 9c49cceabc1..2135782c1bf 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "سازمان فعلی شما سیاستی دارد که به شما اجازه نمی‌دهد به بیش از یک سازمان بپیوندید. لطفاً با مدیران سازمان خود تماس بگیرید یا از یک حساب Bitwarden دیگر ثبت نام کنید." }, - "singleOrgPolicyWarning": { - "message": "اعضای سازمانی که مالک یا سرپرست نیستند و از قبل عضو سازمان دیگری هستند از سازمان شما حذف خواهند شد." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "حذف کاربرها" - }, - "revokeUsers": { - "message": "لغو کاربرها" - }, - "restoreUsers": { - "message": "بازیابی کاربرها" - }, "error": { "message": "خطا" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "اتصال یک دامنه به اعضا اجازه می‌دهد تا در حین ورود با SSO از قسمت شناسه SSO رد شوند." }, - "verifyDomain": { - "message": "تأیید دامنه" - }, - "reverifyDomain": { - "message": "تأیید مجدد دامنه" - }, "copyDnsTxtRecord": { "message": "رکورد DNS TXT را کپی کن" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "رکورد TXT را کپی کرده و در ارائه دهنده DNS خود جایگذاری کن." }, - "domainNameInputHint": { - "message": "مثال: .mydomain.com زیر دامنه‌ها برای تأیید نیاز به ورودی‌های جداگانه دارند." - }, - "automaticDomainVerification": { - "message": "تأیید خودکار دامنه" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden در طول ۷۲ ساعت اول ۳ بار سعی خواهد کرد دامنه را تأیید کند. اگر دامنه قابل تأیید نیست، رکورد DNS در هاست خود را بررسی کرده و به صورت دستی تأیید کنید. در صورت تأیید نشدن دامنه طی ۷ روز از سازمان شما حذف خواهد شد" - }, - "invalidDomainNameMessage": { - "message": "ورودی یک قالب معتبر نیست. فرمت: .mydomain.com زیر دامنه ها برای تأیید نیاز به ورودی‌های جداگانه دارند." - }, "removeDomain": { "message": "حذف دامنه" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "دامنه ذخیره شدند" }, - "domainVerified": { - "message": "دامنه تأیید شد" - }, "duplicateDomainError": { "message": "شما نمی‌توانید یک دامنه را دو بار مطالبه کنید." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ تأیید نشده است. رکورد DNS خود را بررسی کنید.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "تأیید شده" - }, - "domainStatusUnverified": { - "message": "تأیید نشده" - }, "domainNameTh": { "message": "نام" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ تأیید شد", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ تأیید نشد", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 1fc95767f61..980eb4752bf 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Nykyisen organisaatiosi käytäntö ei salli liittymistä yhtä useampaan organisaatioon. Ole yhteydessä organisaatiosi ylläpitoon tai liity eri Bitwarden-tilin kautta." }, - "singleOrgPolicyWarning": { - "message": "Organisaation jäsenet, jotka eivät ole omistajia tai ylläpitäjiä ja jotka ovat jo toisen organisaation jäseniä, poistetaan organisaatiostasi." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Poista käyttäjiä" - }, - "revokeUsers": { - "message": "Mitätöi käyttäjiä" - }, - "restoreUsers": { - "message": "Palauta käyttäjiä" - }, "error": { "message": "Virhe" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Liitetyn verkkotunnuksen avulla jäsenet voivat ohittaa kertakirjautumistunnisteen, kun he kirjautuvat kertakirjautumisen välityksellä." }, - "verifyDomain": { - "message": "Vahvista verkkotunnus" - }, - "reverifyDomain": { - "message": "Vahvista verkkotunnus uudelleen" - }, "copyDnsTxtRecord": { "message": "Kopioi DNS TXT -tietue" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopioi ja liitä TXT-tietue DNS-toimittajasi tietoihin." }, - "domainNameInputHint": { - "message": "Esimerkki: omaosoite.fi. Aliverkkotunnukset on määritettävä ja vahvistettava erikseen." - }, - "automaticDomainVerification": { - "message": "Automaattinen verkkotunnusvarmennus" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden yrittää varmentaa verkkotunnuksen kolme kertaa ensimmäisten 72 tunnin kuluessa. Jos varmennus ei onnistu, tarkista verkkotunnuksesi DNS-tietue ja suorita varmennus manuaalisesti. Varmentamattomat verkkotunnukset poistetaan organisaatiosta 7 päivän kuluttua." - }, - "invalidDomainNameMessage": { - "message": "Syöte ei ole kelvollisessa muodossa. Muoto: omaosoite.fi. Aliverkkotunnukset on määritettävä ja vahvistettava erikseen." - }, "removeDomain": { "message": "Poista verkkotunnus" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Verkkotunnus tallennettiin" }, - "domainVerified": { - "message": "Verkkotunnus vahvistettiin" - }, "duplicateDomainError": { "message": "Et voi lunastaa samaa verkkotunnusta kahdesti." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "Verkkotunnusta $DOMAIN$ ei vahvistettu. Tarkista DNS-tietueesi.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Vahvistettu" - }, - "domainStatusUnverified": { - "message": "Vahvistamaton" - }, "domainNameTh": { "message": "Nimi" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "Verkkotunnus \"$DOMAIN$\" vahvistettiin.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "Verkkotunnusta \"$DOMAIN$\" ei vahvistettu.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Toiminto vaatii vahvistuksen. Jatka asettamalla PIN-koodi." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Hallitse laskutusta Toimittajaportaaliista" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Jatka ilmaisen Bitwarden-kokeilusi käyttöönottoa" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Jatka ilmaisen Bitwarden Salasanahallinta -kokeilusi käyttöönottoa" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Jatka ilmaisen Bitwarden Salaisuushallinta -kokeilusi käyttöönottoa" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Tärkeä ilmoitus" - }, - "setupTwoStepLogin": { - "message": "Määritä kaksivaiheinen kirjautuminen" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Muistuta myöhemmin" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Onko sinulla luotettava pääsy sähköpostiisi, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ei ole" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Kyllä, voin käyttää sähköpostiani luotettavasti" - }, - "turnOnTwoStepLogin": { - "message": "Ota kaksivaiheinen kirjautuminen käyttöön" - }, - "changeAcctEmail": { - "message": "Muuta tilin sähköpostiosoitetta" - }, "removeMembers": { "message": "Poista jäsenet" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index afea61cbee9..fb423cd51da 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Ang iyong kasalukuyang organisasyon ay may patakaran na hindi nagpapahintulot sa iyo na sumali sa higit sa isang organisasyon. Mangyaring makipag ugnay sa iyong mga admins ng organisasyon o mag sign up mula sa ibang account sa Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "Ang mga miyembro ng organisasyon na hindi owner o admin at miyembro na ng ibang organization ay tatanggalin sa inyong samahan." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Tanggalin ang mga gumagamit" - }, - "revokeUsers": { - "message": "Bawiin ang mga gumagamit" - }, - "restoreUsers": { - "message": "Ibalik muli ang mga gumagamit" - }, "error": { "message": "Mali" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Ang pag-connect ng isang domain ay nagpapahintulot sa mga miyembro na laktawan ang field ng SSO identifier habang nag-Login with SSO." }, - "verifyDomain": { - "message": "Patunayan ang domain" - }, - "reverifyDomain": { - "message": "Patunayin muli ang domain" - }, "copyDnsTxtRecord": { "message": "Kopyahin ang DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopyahin at i-paste ang TXT record sa iyong DNS Provider." }, - "domainNameInputHint": { - "message": "Ang aking domain.com. Kinakailangan ng mga naiibang entry upang mapatunayan." - }, - "automaticDomainVerification": { - "message": "Awtomatikong Pagpapatunay sa Domain" - }, - "automaticDomainVerificationProcess": { - "message": "Susubukan ng Bitwarden na patunayan ang domain 3 beses sa loob ng unang 72 oras. Kung hindi makapagpatunayan ang domain, suriin ang DNS record sa iyong host at patunayan ito nang mano-mano. Ang domain ay alisin sa iyong organisasyon sa loob ng 7 araw kung hindi ito mapatunayan" - }, - "invalidDomainNameMessage": { - "message": "Hindi wastong anyo ang ipinasok. Anyo: akingdomain.com. Kinakailangan ng mga hiwalay na entry upang ma-verify ang mga subdomain." - }, "removeDomain": { "message": "Tanggalin ang domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Naisapanatili ang domain" }, - "domainVerified": { - "message": "Nasuri ang Domain" - }, "duplicateDomainError": { "message": "Hindi mo maaaring mag-reklamo ng parehong domain nang dalawang beses." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ hindi napatunayan. Suriin ang iyong DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Na-verify" - }, - "domainStatusUnverified": { - "message": "Hindi na-verify" - }, "domainNameTh": { "message": "Pangalan" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ na-verify", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ hindi na-verify", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index dd8e1174875..cfb7692b2c6 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Votre organisation actuelle a une politique qui ne vous permet pas de rejoindre plus d'une organisation. Veuillez contacter les administrateurs de votre organisation ou vous inscrire à partir d'un compte Bitwarden différent." }, - "singleOrgPolicyWarning": { - "message": "Les membres de l'organisation qui ne sont pas propriétaires ou administrateurs et qui sont déjà membres d'une autre organisation seront supprimés de votre organisation." - }, "singleOrgPolicyMemberWarning": { "message": "Les membres non conformes seront placés en statut révoqué jusqu'à ce qu'ils quittent toutes les autres organisations. Les administrateurs sont exemptés et peuvent restaurer les membres une fois que la conformité est respectée." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Phrase d'empreinte :" }, - "removeUsers": { - "message": "Supprimer les utilisateurs" - }, - "revokeUsers": { - "message": "Révoquer les Utilisateurs" - }, - "restoreUsers": { - "message": "Restaurer les Utilisateurs" - }, "error": { "message": "Erreur" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "La connexion d'un domaine permet aux membres de passer outre le champ de l'identifiant SSO lors de la connexion avec SSO." }, - "verifyDomain": { - "message": "Vérifier le domaine" - }, - "reverifyDomain": { - "message": "Revérifier le domaine" - }, "copyDnsTxtRecord": { "message": "Copier l'enregistrement DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copiez-collez l'enregistrement TXT dans votre fournisseur de services DNS." }, - "domainNameInputHint": { - "message": "Exemple : mondomaine.com. Les sous-domaines nécessitent des entrées séparées pour être vérifiés." - }, - "automaticDomainVerification": { - "message": "Vérification automatique du domaine" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden tentera de vérifier le domaine 3 fois au cours des 72 premières heures. Si le domaine ne peut pas être vérifié, vérifiez l'enregistrement DNS de votre hôte et vérifiez manuellement. Le domaine sera retiré de votre organisation dans 7 jours s'il n'est pas vérifié" - }, - "invalidDomainNameMessage": { - "message": "L'entrée n'est pas saisie dans un format valide. Format : mondomaine.com. Les sous-domaines nécessitent des entrées séparées pour être vérifiés." - }, "removeDomain": { "message": "Retirer le domaine" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domaine sauvegardé" }, - "domainVerified": { - "message": "Domaine vérifié" - }, "duplicateDomainError": { "message": "Vous ne pouvez pas revendiquer le même domaine deux fois." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ non vérifié. Vérifiez votre enregistrement DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Vérifié" - }, - "domainStatusUnverified": { - "message": "Non vérifié" - }, "domainNameTh": { "message": "Nom" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ vérifié", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ non vérifié", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Vérification requise pour cette action. Définissez un NIP pour continuer." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Gérer la facturation depuis le Portail Fournisseur" }, + "continueSettingUp": { + "message": "Continuer la configuration de Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continuer à configurer votre essai gratuit de Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continuer la configuration du Gestionnaire de Mots de Passe Bitwarden" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continuer à configurer votre essai gratuit du gestionnaire de mots de passe Bitwarden" }, + "continueSettingUpSecretsManager": { + "message": "Continuez à configurer votre essai gratuit de Secrets Manager de Bitwarden" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continuez à configurer votre essai gratuit de Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Avis important" - }, - "setupTwoStepLogin": { - "message": "Configurer l'identification à deux facteurs" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden enverra un code au courriel de votre compte pour vérifier les connexions depuis de nouveaux appareils à partir de février 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Vous pouvez configurer l'identification à deux facteurs comme un moyen alternatif de protéger votre compte ou de changer votre adresse courriel à une autre à laquelle vous pouvez accéder." - }, - "remindMeLater": { - "message": "Me le rappeler plus tard" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Avez-vous un accès fiable à votre courriel $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Non, je ne l'ai pas" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Oui, je peux accéder à mon courriel de manière fiable" - }, - "turnOnTwoStepLogin": { - "message": "Configurer l'identification à deux facteurs" - }, - "changeAcctEmail": { - "message": "Changer l'adresse courriel du compte" - }, "removeMembers": { "message": "Retirer des membres" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Gagnez du temps avec le remplissage automatique" }, - "newLoginNudgeBody": { - "message": "Inclure une adresse de site web pour que cet identifiant apparaisse comme une suggestion de remplissage automatique." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Site internet", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "pour que cet identifiant apparaisse comme une suggestion de remplissage automatique.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Paiement en ligne transparent" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Accès SSH convivial pour les développeurs" }, - "newSshNudgeBody": { - "message": "Enregistrez vos clés et connectez-vous avec l'agent SSH pour une authentification rapide et chiffrée." + "newSshNudgeBodyOne": { + "message": "Enregistrez vos clés et connectez-vous avec l'agent SSH pour une authentification rapide et chiffrée.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "En savoir plus sur l'agent SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Redémarrer" diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index bba5cae4e0b..df8a0ac6d1c 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index c0d42391fe2..006b3ad7a2d 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "לפי מדיניות הארגון שלך, אין באפשרותך להצטרף ליותר מארגון אחד. אנא צור קשר עם מנהלי הארגון שלך, או לחלופין - צור חשבון Bitwarden נפרד." }, - "singleOrgPolicyWarning": { - "message": "חברי ארגון שאינם בעלים או מנהלים ושכבר חברים בארגון אחר יוסרו מהארגון שלך." - }, "singleOrgPolicyMemberWarning": { "message": "חברים שאינם עומדים בדרישות במצב מבוטל עד שיעזבו את כל שאר הארגונים. מנהלים הם פטורים ויכולים לשחזר חברים ברגע שיעמדו בדרישות." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "הסר משתמשים" - }, - "revokeUsers": { - "message": "בטל משתמשים" - }, - "restoreUsers": { - "message": "שחזר משתמשים" - }, "error": { "message": "שגיאה" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "חיבור דומיין מאפשר לחברים לדלג על שדה מזהה SSO במהלך כניסה עם SSO." }, - "verifyDomain": { - "message": "אמת דומיין" - }, - "reverifyDomain": { - "message": "אמת מחדש דומיין" - }, "copyDnsTxtRecord": { "message": "העתק רשומת DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "העתק והדבק את רשומת ה־TXT אל ספק ה־DNS שלך." }, - "domainNameInputHint": { - "message": "דוגמה: mydomain.com. תת-דומיינים דורשים שרשומות נפרדות יאומתו." - }, - "automaticDomainVerification": { - "message": "אימות דומיין אוטומטי" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden ינסה לאמת את הדומיין 3 פעמים במהלך 72 השעות הראשונות. אם הדומיין אינו ניתן לאימות, בדוק את רשומת ה־DNS במארח שלך ואמת באופן ידני. הדומיין יוסר מהארגון שלך תוך 7 ימים אם הוא לא מאומת" - }, - "invalidDomainNameMessage": { - "message": "הקלט אינו בפורמט תקין. פורמט: mydomain.com. תת-דומיינים דורשים שרשומות נפרדות יאומתו." - }, "removeDomain": { "message": "הסר דומיין" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "דומיין נשמר" }, - "domainVerified": { - "message": "דומיין אומת" - }, "duplicateDomainError": { "message": "אתה לא יכול לדרוש את אותו הדומיין פעמיים." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ אינו מאומת. בדוק את רשומת ה־DNS שלך.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "מאומת" - }, - "domainStatusUnverified": { - "message": "לא מאומת" - }, "domainNameTh": { "message": "שם" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ מאומת", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ אינו מאומת", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "נדרש אימות עבור פעולה זו. הגדר PIN כדי להמשיך." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "נהל חיובים מפורטל הספקים" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "המשך בהגדרת הניסיון החינמי של Bitwarden שלך" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "המשך בהגדרת הניסיון החינמי של מנהל הסיסמאות Bitwarden שלך" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "המשך בהגדרת הניסיון החינמי של מנהל הסודות Bitwarden שלך" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "הודעה חשובה" - }, - "setupTwoStepLogin": { - "message": "הגדר כניסה דו־שלבית" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden ישלח קוד לדוא\"ל החשבון שלך כדי לאמת כניסות ממכשירים חדשים החל מפברואר 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "אתה יכול להגדיר כניסה דו־שלבית כדרך חלופית להגן על החשבון שלך או לשנות את הדוא\"ל שלך לאחד שאתה יכול לגשת אליו." - }, - "remindMeLater": { - "message": "הזכר לי מאוחר יותר" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "יש לך גישה מהימנה לדוא\"ל שלך, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "לא, אין לי" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "כן, אני יכול לגשת לדוא\"ל שלי באופן מהימן" - }, - "turnOnTwoStepLogin": { - "message": "הפעל כניסה דו־שלבית" - }, - "changeAcctEmail": { - "message": "שנה דוא\"ל חשבון" - }, "removeMembers": { "message": "הסר חברים" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index bc6667242b7..c992999631d 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 80596192dbf..e858dfb0fa6 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -3318,7 +3318,7 @@ "message": "Vanjski id je nešifrirana referenca koju koristi Bitwarden Directory Connector i API." }, "ssoExternalId": { - "message": "SSO External ID" + "message": "SSO vanjski Id" }, "ssoExternalIdDesc": { "message": "SSO External ID is an unencrypted reference between Bitwarden and your configured SSO provider." @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Tvoja organizacija ima pravilo koje ti ne dozvoljava pridruživanje drugim organizacijama. Molimo kontaktiraj administratora svoje organizacije ili se prijavi s privatnim Bitwarden računom." }, - "singleOrgPolicyWarning": { - "message": "Članovi organizacije koji nisu Vlasnici ili Administratori, a već su članovi neke druge organizacije, biti će uklonjeni iz tvoje organizacije." - }, "singleOrgPolicyMemberWarning": { "message": "Nesukladni članovi bit će opozvani dok ne napuste sve druge organizacije. Administratori su izuzeti i mogu vratiti članove nakon što se ispuni usklađenost." }, @@ -5884,16 +5881,7 @@ "message": "Otisak prsta" }, "fingerprintPhrase": { - "message": "Fingerprint phrase:" - }, - "removeUsers": { - "message": "Ukloni korisnike" - }, - "revokeUsers": { - "message": "Opozovi korisnike" - }, - "restoreUsers": { - "message": "Obnovi korisnike" + "message": "Jedinstvena fraza:" }, "error": { "message": "Greška" @@ -6300,7 +6288,7 @@ "message": "Besplatan Bitwarden Families" }, "sponsoredBitwardenFamilies": { - "message": "Sponsored families" + "message": "Sponzorirani obiteljski paket" }, "noSponsoredFamiliesMessage": { "message": "No sponsored families" @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Povezivanje domene omogućuje članovima da preskoče polje SSO identifikatora tijekom SSO prijave." }, - "verifyDomain": { - "message": "Potvrdi domenu" - }, - "reverifyDomain": { - "message": "Ponovno potvrdi domenu" - }, "copyDnsTxtRecord": { "message": "Kopiraj DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopiraj i zalijepi TXT zapis kod svog DNS pružatelja usluga." }, - "domainNameInputHint": { - "message": "Primjer: mojadomena.hr Poddomene zahtijevaju zasebne unose za provjeru." - }, - "automaticDomainVerification": { - "message": "Automatska potvrda domene" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden će pokušati potvrditi domenu 3 puta tijekom prva 72 sata. Ako se domena ne može potvrditi, provjeri DNS zapis na svom poslužitelju i ručno potvrdi. Domena će, ako se ne potvrdi, biti uklonjena iz vaše organizacije nakon 7 dana" - }, - "invalidDomainNameMessage": { - "message": "Unos nije važeći. Format: mojadomena.hr Poddomene zahtijevaju zasebne unose za provjeru." - }, "removeDomain": { "message": "Ukloni domenu" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domena spremljena" }, - "domainVerified": { - "message": "Domena potvrđena" - }, "duplicateDomainError": { "message": "Ne možeš dvaput zatražiti istu domenu." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nije potvrđena. Provjeri svoj DNS zapis.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Potvrđena" - }, - "domainStatusUnverified": { - "message": "Nije potvrđena" - }, "domainNameTh": { "message": "Naziv" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ potvrđena", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ nije potvrđena", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Za ovu radnju potrebna je potvrda. Postavi PIN za nastavak." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Upravljanje naplatom s Portala pružatelja usluga" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Nastavi s postavljanjem besplatne probe Bitwardena" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Nastavi s postavljanjem besplatne probe Bitwarden Upravitelja Lozinki" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Nastavi s postavljanjem besplatne probe Btwarden Secrets Managera" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Važna napomena" - }, - "setupTwoStepLogin": { - "message": "Postavi dvostruku autentifikaciju" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden će, počevši od veljače 2025., za provjeru prijava s novih uređaja poslati kôd na e-poštu tvog računa." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Prijavu dvostrukom autentifikacijom možeš postaviti kao alternativni način zaštite svog računa ili promijeni svoju e-poštu u onu kojoj možeš pristupiti." - }, - "remindMeLater": { - "message": "Podsjeti me kasnije" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Imaš li pouzdan pristup svojoj e-pošti: $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ne, nemam" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Da, pouzdano mogu pristupiti svojoj e-pošti" - }, - "turnOnTwoStepLogin": { - "message": "Uključi prijavu dvostrukom autentifikacijom" - }, - "changeAcctEmail": { - "message": "Promjeni e-poštu računa" - }, "removeMembers": { "message": "Ukloni članove" }, @@ -10385,16 +10292,16 @@ "message": "Your master password and encryption keys have been updated. Your other devices have been logged out." }, "trustUserEmergencyAccess": { - "message": "Trust and confirm user" + "message": "Vjeruj i potvrdi korisnika" }, "trustOrganization": { - "message": "Trust organization" + "message": "Vjeruj organizaciji" }, "trust": { - "message": "Trust" + "message": "Vjeruj" }, "doNotTrust": { - "message": "Do not trust" + "message": "Nemoj vjerovati" }, "organizationNotTrusted": { "message": "Organization is not trusted" @@ -10635,37 +10542,56 @@ "message": "New business unit" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Uštedi vrijeme s auto-ispunom" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Uključi", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "web stranicu", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "kako bi ova prijava bila predložena u auto-ispuni.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "S karticama jednostavno i sigurno automatski ispunjavaš obrasce za plaćanje." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Pojednostavi stvaranje računa" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "S identitetima brzo automatski ispunjavaš duge registracijske i kontaktne obrasce." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Čuvaj svoje osjetljive podatke na sigurnom" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "S bilješkama sigurno pohrani svoje osjetljive podatke poput podataka o banci ili osiguranju." }, "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Pohrani svoje ključeve i poveži se sa SSH agentom za brzu, šifriranu autentifikaciju.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Saznaj više o SSH agentu", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { - "message": "Restart" + "message": "Saznaj više o SSH agentu" }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "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 provider's subscription page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index e6fceec3cd0..d01bebf1511 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Jelenlegi szervezetének van olyan irányelve, amely nem engedélyezi, hogy több szervezethez csatlakozzunk. Lépjünk kapcsolatba szervezetünk adminisztrátorával vagy regisztráljunk egy másik Bitwarden fiókból." }, - "singleOrgPolicyWarning": { - "message": "A szervezet azon tagjait, akik nem tulajdonosok vagy rendszergazdák, és már egy másik szervezet tagjai, eltávolítjáara kerülnek a szervezetből." - }, "singleOrgPolicyMemberWarning": { "message": "A nem megfelelő tagok visszavont státuszba kerülnek mindaddig, amíg ki nem lépnek az összes többi szervezetből. Az adminisztrátorok mentesülnek és visszaállíthatják a tagokat, ha megfelelnek a megfelelőségnek." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Ujjlenyomat kifejezés:" }, - "removeUsers": { - "message": "Felhasználók eltávolítása" - }, - "revokeUsers": { - "message": "Felhasználók visszavonása" - }, - "restoreUsers": { - "message": "Felhasználók helyreállítása" - }, "error": { "message": "Hiba" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "A domain csatlakoztatása lehetővé teszi a tagoknak, hogy kihagyják az SSO azonosító mezőt az SSO-val bejelentkezés során." }, - "verifyDomain": { - "message": "Domain ellenőrzése" - }, - "reverifyDomain": { - "message": "Domain ismételt ellenőrzése" - }, "copyDnsTxtRecord": { "message": "DNS TXT rekord másolása" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "A TXT rekord másolása és bellesztése a DNS szolgáltatóba." }, - "domainNameInputHint": { - "message": "Példa: mydomain.com. Az aldomainekhez külön bejegyzések szükségesek az ellenőrzéshez." - }, - "automaticDomainVerification": { - "message": "Automatikus domain ellenőrzés" - }, - "automaticDomainVerificationProcess": { - "message": "A Bitwarden az első 72 óra során háromszor kísérli meg a domain ellenőrzését. Ha a domain nem ellenőrizhető, ellenőrizzük a DNS rekordot a kiszolgálón és ellenőrizzük azt manuálisan. A domain 7 napon belül eltávolításra kerül, ha nem kerül ellenőrzésre." - }, - "invalidDomainNameMessage": { - "message": "A bemeneti formátum nem érvényes. Formátum: mydomain.com. Az aldomainekhez külön bejegyzések szükségesek az ellenőrzéshez." - }, "removeDomain": { "message": "Domain eltávolítása" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "A domain mentésre került." }, - "domainVerified": { - "message": "A domain ellenőrzésre került." - }, "duplicateDomainError": { "message": "Nem igényelhető kétszer ugyanaz a domain." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nincs ellenőrizve. Ellenőrizzük a DNS rekordot.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Ellenőrzött" - }, - "domainStatusUnverified": { - "message": "Nem ellenőrzött" - }, "domainNameTh": { "message": "Név" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ ellenőrzésre került.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ nem lett ellenőrizve.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Ehhez a művelethez ellenőrzés szükséges. A folytatáshoz állítsunk be egy PIN kódot." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "A számlázás kezelése a szolgáltatói portálon keresztül" }, + "continueSettingUp": { + "message": "A Bitwarden beüzemelésének folytatása" + }, "continueSettingUpFreeTrial": { "message": "Folytassuk a Bitwarden ingyenes próbaverziójának beállítását." }, + "continueSettingUpPasswordManager": { + "message": "Folytassuk a Bitwarden jelszókezelő beüzemelését." + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Folytassuk a Bitwarden jelszókezelő ingyenes próbaverziójának beállítását." }, + "continueSettingUpSecretsManager": { + "message": "Folytassuk a Bitwarden titkos kód kezelő beüzemelését." + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Folytassuk a Bitwarden titkos kód kezelő ingyenes próbaverziójának beállítását." }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Fontos megjegyzés" - }, - "setupTwoStepLogin": { - "message": "Kétfaktoros bejelentkezés beállítása" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "A Bitwarden 2025 februárjától kódot küld a fiókhoz tartozó email-címre, amellyel ellenőrizhetők az új eszközökről történő bejelentkezések." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "A fiók védelmének alternatív módjaként beállíthatunk kétlépcsős bejelentkezést vagy módosíthatjuk az email címet egy elérhetőre." - }, - "remindMeLater": { - "message": "Emlékeztetés később" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Megbízható a hozzáférés $EMAIL$ email címhez?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nem, nem érem el" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Igen, megbízhatóan hozzáférek az emailjeimhez" - }, - "turnOnTwoStepLogin": { - "message": "Kétlépéses bejelentkezés bekapcsolása" - }, - "changeAcctEmail": { - "message": "Fiók email cím megváltoztatása" - }, "removeMembers": { "message": "Tagok eltávolítása" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Bevonás:", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Webhely", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "így ez a bejelentkezés automatikus kitöltési javaslatként jelenik meg.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Tároljuk el a kulcsokat és csatlakozzunk az SSH ügynökhöz a gyors, titkosított hitelesítéshez.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "További információ az SSH ügynökről", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Újraindítás" diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index ac2f713704c..9dbcf72db0c 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Organisasi Anda saat ini memiliki kebijakan yang tidak mengizinkan Anda untuk bergabung dengan lebih dari satu organisasi. Silakan hubungi admin organisasi Anda atau daftar dari akun Bitwarden yang berbeda." }, - "singleOrgPolicyWarning": { - "message": "Anggota organisasi yang bukan Pemilik atau Administrator dan sudah menjadi anggota organisasi lain akan dihapus dari organisasi Anda." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Hapus pengguna" - }, - "revokeUsers": { - "message": "Cabut Pengguna" - }, - "restoreUsers": { - "message": "Pulihkan pengguna" - }, "error": { "message": "Galat" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index 6203146962f..88621ed6753 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "La tua organizzazione corrente ha una politica che non ti consente di unirti ad altre organizzazioni. Contatta gli amministratori della tua organizzazione o registrati da un altro account Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "I membri dell'organizzazione che non sono proprietari o amministratori e sono membri di un'altra organizzazione saranno rimossi dalla tua organizzazione." - }, "singleOrgPolicyMemberWarning": { "message": "I membri non conformi entreranno in stato 'revocato' finché non lasceranno tutte le altre organizzazioni. Gli amministratori sono esenti e possono ripristinare i membri una volta soddisfatta la conformità." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Rimuovi utenti" - }, - "revokeUsers": { - "message": "Revoca utenti" - }, - "restoreUsers": { - "message": "Ripristina utenti" - }, "error": { "message": "Errore" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connettere un dominio permette ai membri di non usare il campo dell'identificatore SSO durante l'accesso con SSO." }, - "verifyDomain": { - "message": "Verifica dominio" - }, - "reverifyDomain": { - "message": "Verifica dominio di nuovo" - }, "copyDnsTxtRecord": { "message": "Copia rapporti TXT DNS" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copia e incolla il rapporto TXT nel tuo fornitore di DNS." }, - "domainNameInputHint": { - "message": "Esempio: miodominio.com. I sottodomini devono essere inseriti separatamente per essere verificati." - }, - "automaticDomainVerification": { - "message": "Verifica del dominio automatica" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden proverà a verificare il dominio 3 volte durante le prime 72 ore. Se il dominio non può essere verificato, controlla il rapporto DNS nel tuo host e verificalo manualmente. Il dominio sarà rimosso dalla tua organizzazione in 7 giorni se non è verificato" - }, - "invalidDomainNameMessage": { - "message": "L'input non è un formato valido. Formato: miodominio.com. I sottodomini devono essere inseriti separatamente per essere verificati." - }, "removeDomain": { "message": "Rimuovi dominio" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Dominio salvato" }, - "domainVerified": { - "message": "Dominio verificato" - }, "duplicateDomainError": { "message": "Non puoi attestare lo stesso dominio due volte." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ non verificato. Controlla il rapporto DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verificato" - }, - "domainStatusUnverified": { - "message": "Non verificato" - }, "domainNameTh": { "message": "Nome" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verificato", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ non verificato", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verifica necessaria per questa azione. Imposta un PIN per continuare." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Gestisci la fatturazione dal Portale del Fornitore" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continua a configurare la tua prova gratuita di Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continua a configurare la tua prova gratuita di Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continua a configurare la tua prova gratuita di Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Avviso importante" - }, - "setupTwoStepLogin": { - "message": "Imposta l'accesso in due passaggi" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden invierà un codice all'email del tuo account per verificare gli accessi da nuovi dispositivi." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Puoi impostare l'accesso in due passaggi per proteggere il tuo account, oppure scegliere una email alla quale puoi accedere." - }, - "remindMeLater": { - "message": "Ricordamelo più tardi" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Confermi di poter accedere all'email $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sì, ho accesso all'email" - }, - "turnOnTwoStepLogin": { - "message": "Attiva l'accesso in due passaggi" - }, - "changeAcctEmail": { - "message": "Cambia l'email dell'account" - }, "removeMembers": { "message": "Rimuovi membri" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index 06ec1242726..969636661de 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "現在の組織には、複数の組織に参加することを許可していないポリシーがあります。 組織の管理者に連絡するか、別の Bitwarden アカウントから登録してください。" }, - "singleOrgPolicyWarning": { - "message": "オーナーまたは管理者でなく、すでに他の組織のメンバーであるメンバーは組織から削除されます。" - }, "singleOrgPolicyMemberWarning": { "message": "ポリシーに準拠していないメンバーは、他のすべての組織から退出するまで失効状態になります。これは管理者には適用されず、管理者はコンプライアンスが満たされたメンバーを復元できます。" }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "ユーザーを削除" - }, - "revokeUsers": { - "message": "ユーザーを取り消す" - }, - "restoreUsers": { - "message": "ユーザーの復元" - }, "error": { "message": "エラー" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "ドメインを接続すると、メンバーは SSO でログインする際に SSO 識別子フィールドをスキップできます。" }, - "verifyDomain": { - "message": "ドメインを確認" - }, - "reverifyDomain": { - "message": "ドメインを再確認する" - }, "copyDnsTxtRecord": { "message": "DNS TXT レコードをコピー" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "TXT レコードをコピーして DNS プロバイダーに貼り付けてください。" }, - "domainNameInputHint": { - "message": "例: mydomain.com サブドメインを検証するには別々のエントリが必要です。" - }, - "automaticDomainVerification": { - "message": "ドメインの自動認証" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden は最初の 72 時間以内にドメインの検証を3回試みます。 ドメインが検証できない場合は、ホストの DNS レコードを確認し、手動で検証してください。 認証されていない場合、ドメインは7日後に組織から削除されます。" - }, - "invalidDomainNameMessage": { - "message": "入力されたものは有効な形式ではありません。フォーマット例: mydomain.com サブドメインは検証するために個別のエントリを必要とします。" - }, "removeDomain": { "message": "ドメインを削除" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "ドメインを保存しました" }, - "domainVerified": { - "message": "ドメインを認証しました" - }, "duplicateDomainError": { "message": "同じドメインを二度要求することはできません。" }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ は認証されていません。DNS レコードを確認してください。", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "認証済み" - }, - "domainStatusUnverified": { - "message": "未認証" - }, "domainNameTh": { "message": "名前" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ を認証しました", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ は認証されていません", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "この操作には認証が必要です。続行するには PIN を設定してください。" }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "プロバイダーポータルからの請求を管理" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Bitwarden の無料トライアルのセットアップを続ける" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Bitwarden パスワードマネージャーの無料トライアルのセットアップを続けます" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Bitwarden シークレットマネージャーの無料トライアルのセットアップを続けます" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "メンバーを削除" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index c0a41f0e5df..16f409b2fd9 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index f154ac5c0ab..98095db6c1b 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index 08ae7c6eba8..ace7d07e903 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಸಂಸ್ಥೆಯು ಒಂದು ನೀತಿಯನ್ನು ಹೊಂದಿದ್ದು ಅದು ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಸಂಸ್ಥೆಗಳಿಗೆ ಸೇರಲು ನಿಮಗೆ ಅನುಮತಿಸುವುದಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ ಅಥವಾ ಬೇರೆ ಬಿಟ್‌ವಾರ್ಡನ್ ಖಾತೆಯಿಂದ ಸೈನ್ ಅಪ್ ಮಾಡಿ." }, - "singleOrgPolicyWarning": { - "message": "ಮಾಲೀಕರು ಅಥವಾ ನಿರ್ವಾಹಕರಲ್ಲದ ಮತ್ತು ಈಗಾಗಲೇ ಮತ್ತೊಂದು ಸಂಸ್ಥೆಯ ಸದಸ್ಯರಾಗಿರುವ ಸಂಸ್ಥೆಯ ಸದಸ್ಯರನ್ನು ನಿಮ್ಮ ಸಂಸ್ಥೆಯಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "ದೋಷ" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 942a83b3279..b13e89d0f69 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "현재 조직에 하나 이상의 조직에 참가할 수 없도록 정책이 지정되어 있습니다. 조직 관리자에게 문의하거나 다른 Bitwarden 계정으로 로그앤해주세요." }, - "singleOrgPolicyWarning": { - "message": "소유자 또는 관리자가 아닌 조직 구성원 및 이미 다른 조직의 구성원인 경우 이 조직에서 제거됩니다." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "사용자 삭제" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "오류" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 1e1d4af4b67..0f259e7aced 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Pašreizējā apvienībā ir nosacījums, kas neļauj pievienoties vairāk kā vienai apvienībai. Lūgums sazināties ar savas apvienības pārvaldītājiem vai pieteikties no cita Bitwarden konta." }, - "singleOrgPolicyWarning": { - "message": "Apvienības dalībnieki, kas nav īpašnieki vai pārvaldītāji un jau ir dalībnieki citā apvienībā, tiks atbrīvoti." - }, "singleOrgPolicyMemberWarning": { "message": "Pamatnostādnei neatbilstoši dalībniekiem tiks piešķirts stāvoklis \"Atsaukts\", līdz viņī pametīs visas pārējās apvienības. Pārvaldītāji ir izņēmums, un viņi var atjaunot dalībniekus, tiklīdz ir īstenota atbilstība pamatnostādnei." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Atpazīšanas vārdkopa:" }, - "removeUsers": { - "message": "Noņemt lietotājus" - }, - "revokeUsers": { - "message": "Atsaukt lietotāju piekļuvi" - }, - "restoreUsers": { - "message": "Atjaunot lietotāju piekļuvi" - }, "error": { "message": "Kļūda" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Savienošanās ar domēnu ļauj dalībniekiem pieteikšanās ar SSO laikā izlaist vienotās pieteikšanās identifikatora lauku." }, - "verifyDomain": { - "message": "Apstiprināt domēnu" - }, - "reverifyDomain": { - "message": "Atkārtoti apstiprināt domēnu" - }, "copyDnsTxtRecord": { "message": "Ievietot starpliktuvē DNS TXT ierakstu" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "TXT ieraksts ir jāievieto starpliktuvē un jāielīmē DNS nodrošinātāja pārvaldības lapā." }, - "domainNameInputHint": { - "message": "Piemērs: mansdomens.lv. Apakšdomēniem ir nepieciešams apstiprināt atsevišķus ierakstus." - }, - "automaticDomainVerification": { - "message": "Automātiska domēnu apstiprināšana" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden mēģinās pārbaudīt domēnu 3 reizes pirmajās 72 stundās. Ja domēnu nevarēs apliecināt, būs jāpārbauda DNS ieraksts saimniekdatorā un pašrocīgi tas jāapliecina. Domēns tiks noņemts no apvienības pēc 7 dienām, ja tas nebūs apliecināts" - }, - "invalidDomainNameMessage": { - "message": "Ievadītā vērtība ir nederīga. Piemēram: mansdomens.lv. Apakšdomēniem ir nepieciešams apstiprināt atsevišķus ierakstus." - }, "removeDomain": { "message": "Noņemt domēnu" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domēns ir saglabāts" }, - "domainVerified": { - "message": "Domēns ir apliecināts" - }, "duplicateDomainError": { "message": "Vienu domēnu nevar pieprasīt divreiz." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nav apstiprināts. Jāpārbauda DNS ieraksts.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Apstiprināts" - }, - "domainStatusUnverified": { - "message": "Nav apstiprināts" - }, "domainNameTh": { "message": "Nosaukums" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ ir apstiprināts", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ nav apstiprināts", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Šai darbībai ir nepieciešama apliecināšana. Jāiestata PIN, lai turpinātu." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Norēķinus var pārvaldīt Nodrošinātāju portālā" }, + "continueSettingUp": { + "message": "Turpināt Bitwarden iestatīšanu" + }, "continueSettingUpFreeTrial": { "message": "Turpināt iestatīt savu Bitwarden bezmaksas izmēģinājumu" }, + "continueSettingUpPasswordManager": { + "message": "Turpināt Bitwarden paroļu pārvaldnieka iestatīšanu" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Turpināt iestatīt savu Bitwarden paroļu pārvaldnieka bezmaksas izmēģinājumu" }, + "continueSettingUpSecretsManager": { + "message": "Turpināt Bitwarden noslēpumu pārvaldnieka iestatīšanu" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Turpināt iestatīt savu Bitwarden noslēpumu pārvaldnieka bezmaksas izmēģinājumu" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Svarīgs paziņojums" - }, - "setupTwoStepLogin": { - "message": "Iestatīt divpakāpju pieteikšanos" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden, sākot ar 2025. gada februāri, nosūtīs kodu uz konta e-pasta adresi, lai apliecinātu pieteikšanos no jaunām ierīcēm." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Var iestatīt divpakāpju pieteikšanos kā citu veidu, kā aizsargāt savu kontu, vai iestatīt savu e-pasta adresi uz tādu, kurai ir piekļuve." - }, - "remindMeLater": { - "message": "Atgādināt man vēlāk" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Vai ir uzticama piekļuve savai e-pasta adresei $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nē, nav" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Jā, varu uzticami piekļūt savam e-pastam" - }, - "turnOnTwoStepLogin": { - "message": "Ieslēgt divpakāpju pieteikšanos" - }, - "changeAcctEmail": { - "message": "Mainīt konta e-pasta adresi" - }, "removeMembers": { "message": "Noņemt dalībniekus" }, @@ -10397,7 +10304,7 @@ "message": "Neuzticēties" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Apvienība nav uzticama" }, "emergencyAccessTrustWarning": { "message": "Lai nodrošinātu sava konta drošību, jāapstiprina tikai tad, ja šim lietotājam ir nodrošināta ārkārtas piekļuve un tā pirkstu nospiedums atbilsta tam, kas ir attēlots tā kontā" @@ -10406,7 +10313,7 @@ "message": "Lai nodrošinātu sava konta drošību, jāturpina tikai tad, ja esi šīs apvienības dalībnieks, ir iespējota konta atkope un zemāk attēlotais pirkstu nospiedums atbilst apvienības pirkstu nospiedumam." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Šai apvienībai ir uzņēmējdarbības pamatnostādne, kas Tevi iekļaus konta atkopē. Iekļaušana ļaus apvienības pārvaldītājiem nomainīt Tavu paroli. Turpini tikai tad, ja zini šo apvienību un zemāk attēlotā pirkstu nospieduma vārdkopa atbilst apvienības pirkstu nospiedumam!" }, "trustUser": { "message": "Uzticēties lietotājam" @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Laika ietaupīšana ar automātisko aizpildi" }, - "newLoginNudgeBody": { - "message": "Iekļauj tīmekļvietni, lai šis pieteikšanās vienums parādītos kā automātiskās aizpildes ieteikums!" + "newLoginNudgeBodyOne": { + "message": "Iekļauj", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "tīmekļvietni,", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "lai šis pieteikšanās vienums parādītos kā automātiskās aizpildes ieteikums!", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Plūdena apmaksa tiešsaistē" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Izstrādātājiem draudzīga SSH piekļuve" }, - "newSshNudgeBody": { - "message": "Glabā savas atslēgas un savienojies ar SSH aģentu ātrai, šifrētai autentificēšanai!" + "newSshNudgeBodyOne": { + "message": "Glabā savas atslēgas un savienojies ar SSH aģentu ātrai, šifrētai autentificēšanai!", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Uzzināt vairāk par SSH aģentu", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Palaist no jauna" diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index e0d3b632023..f7f012bce15 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "ഒന്നിൽ കൂടുതൽ ഓർഗനൈസേഷനിൽ ചേരാൻ നിങ്ങളെ അനുവദിക്കാത്ത ഒരു നയമാണ് നിങ്ങളുടെ നിലവിലെ ഓർഗനൈസേഷന് ഉള്ളത്. നിങ്ങളുടെ ഓർഗനൈസേഷൻ അഡ്‌മിനുകളുമായി ബന്ധപ്പെടുക അല്ലെങ്കിൽ മറ്റൊരു ബിറ്റ്‌വാർഡൻ അക്കൗണ്ടിൽ നിന്ന് സൈൻ അപ്പ് ചെയ്യുക." }, - "singleOrgPolicyWarning": { - "message": "ഉടമകളോ അഡ്മിനിസ്ട്രേറ്റർമാരോ അല്ലാത്തവരും ഇതിനകം മറ്റൊരു ഓർഗനൈസേഷനിൽ അംഗവുമായ ഓർഗനൈസേഷൻ അംഗങ്ങളെ നിങ്ങളുടെ ഓർഗനൈസേഷനിൽ നിന്ന് നീക്കംചെയ്യും." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index f154ac5c0ab..98095db6c1b 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index f154ac5c0ab..98095db6c1b 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 11001c4f0aa..f0e96f25a16 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Din nåværende organisasjon har en policy som ikke lar deg bli med i mer enn én organisasjon. Kontakt din organisasjons admins eller registrer deg fra en annen Bitwarden-konto." }, - "singleOrgPolicyWarning": { - "message": "Organisasjonsmedlemmer som ikke er eiere eller administratorer, og som allerede er medlem av en annen organisasjon, blir fjernet fra din organisasjon." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Fjern brukere" - }, - "revokeUsers": { - "message": "Fjern brukere" - }, - "restoreUsers": { - "message": "Gjenopprett brukere" - }, "error": { "message": "Feil" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Tilslutning av et domene lar medlemmer hoppe over SSO-identifikasjonsfeltet under SSO-basert innlogging." }, - "verifyDomain": { - "message": "Bekreft domene" - }, - "reverifyDomain": { - "message": "Bekreft domene på nytt" - }, "copyDnsTxtRecord": { "message": "Kopier DNS TXT oppføring" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopier og lim inn TXT oppføringen til din DNS-tilbyder." }, - "domainNameInputHint": { - "message": "Eksempel: mittdomene.com. Underdomener krever separate oppføringer for å bekreftes." - }, - "automaticDomainVerification": { - "message": "Automatisk domenebekreftelse" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden vil forsøke å verifisere domenet tre ganger de første 72 timene. Hvis domenet ikke kan bekreftes, sjekk DNS-oppføringen i verten og bekreft manuelt. Domenet vil bli fjernet fra organisasjonen din i løpet av syv dager hvis det ikke er bekreftet" - }, - "invalidDomainNameMessage": { - "message": "Input er ikke i et gyldig format. Format: mittdomene.com. Underdomener krever separate oppføringer for å bekreftes." - }, "removeDomain": { "message": "Fjern domene" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domene lagret" }, - "domainVerified": { - "message": "Domene bekreftet" - }, "duplicateDomainError": { "message": "Du kan ikke kreve det samme domenet to ganger." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ ikke bekreftet. Sjekk DNS-oppføringen.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Bekreftet" - }, - "domainStatusUnverified": { - "message": "Ubekreftet" - }, "domainNameTh": { "message": "Navn" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ bekreftet", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ ikke bekreftet", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Viktig melding" - }, - "setupTwoStepLogin": { - "message": "Sett opp 2-trinnspålogging" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Minn meg på det senere" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nei, det gjør jeg ikke" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, jeg har pålitelig tilgang til e-posten min" - }, - "turnOnTwoStepLogin": { - "message": "Slå på 2-trinnsinnlogging" - }, - "changeAcctEmail": { - "message": "Endre kontoens E-postadresse" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Spar tid med auto-utfylling" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Utviklervennlig SSH-tilgang" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Omstart" diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index 123308cddfd..a8955b0b9e7 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index 7b3c4ab3429..ddc6b5fda54 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Jouw huidige organisatie heeft een beleid dat je niet toestaat om deel te nemen aan meer dan één organisatie. Neem contact op met de beheerders van jouw organisatie of meld je aan met een ander Bitwarden-account." }, - "singleOrgPolicyWarning": { - "message": "Leden van de organisatie die geen eigenaar of beheerder zijn en die al lid zijn van een andere organisatie, worden verwijderd uit jouw organisatie." - }, "singleOrgPolicyMemberWarning": { "message": "Niet-conforme leden krijgen de status ingetrokken totdat ze alle andere organisaties hebben verlaten. Beheerders zijn uitgezonderd en kunnen leden herstellen zodra ze aan de naleving voldoen." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Vingerafdrukzin:" }, - "removeUsers": { - "message": "Gebruikers verwijderen" - }, - "revokeUsers": { - "message": "Gebruikers intrekken" - }, - "restoreUsers": { - "message": "Gebruikers herstellen" - }, "error": { "message": "Fout" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Door een domein te verbinden kunnen leden het SSO-identificatieveld tijdens het inloggen met SSO overslaan." }, - "verifyDomain": { - "message": "Domein verifiëren" - }, - "reverifyDomain": { - "message": "Domein herverifiëren" - }, "copyDnsTxtRecord": { "message": "DNS TXT record kopiëren" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopieer en plak het TXT-record in je DNS-provider." }, - "domainNameInputHint": { - "message": "Voorbeeld: mijndomein.com. Subdomeinen moet je afzonderlijk verifiëren." - }, - "automaticDomainVerification": { - "message": "Automatische domeinverificatie" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden probeert het domein gedurende de eerste 72 uur driemaal te verifiëren. Als het domein niet geverifieerd kan worden, controleer dan het DNS-record in je host en controleer het handmatig. Het domein wordt binnen 7 dagen verwijderd uit je organisatie als het niet geverifieerd is" - }, - "invalidDomainNameMessage": { - "message": "Invoer is geen geldig formaat. Formaat: mijndomein.com. Subdomeinen moet je afzonderlijk verifiëren." - }, "removeDomain": { "message": "Domein verwijderen" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domein opgeslagen" }, - "domainVerified": { - "message": "Domein geverifieerd" - }, "duplicateDomainError": { "message": "Je kunt hetzelfde domein niet tweemaal opeisen." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ niet geverifieerd. Controleer je DNS-record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Geverifiëerd" - }, - "domainStatusUnverified": { - "message": "Niet geverifieerd" - }, "domainNameTh": { "message": "Naam" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ geverifieerd", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ niet geverifieerd", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Deze actie vereist verificatie actie. Stel een pincode in om door te gaan." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Facturering beheren vanuit het aanbiederportaal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Doorgaan met het instellen van je gratis proefperiode van Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Doorgaan met het instellen van je gratis proefperiode van Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Doorgaan met het instellen van je gratis proefperiode van Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Belangrijke mededeling" - }, - "setupTwoStepLogin": { - "message": "Tweestapsaanmelding instellen" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Vanaf februari 2025 stuurt Bitwarden een code naar het e-mailadres van je account om inloggen op nieuwe apparaten te verifiëren." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Je kunt tweestapsaanmelding instellen als een alternatieve manier om je account te beschermen of je e-mailadres te veranderen naar een waar je toegang toe hebt." - }, - "remindMeLater": { - "message": "Herinner me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Heb je betrouwbare toegang tot je e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nee, dat heb ik niet" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, ik heb betrouwbare toegang tot mijn e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Tweestapsaanmelding inschakelen" - }, - "changeAcctEmail": { - "message": "E-mailadres van het account veranderen" - }, "removeMembers": { "message": "Leden verwijderen" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Tijd besparen met automatisch aanvullen" }, - "newLoginNudgeBody": { - "message": "Voeg een website toe zodat deze login wordt weergegeven als een automatische invulsuggestie." + "newLoginNudgeBodyOne": { + "message": "Voeg een", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "toe zodat deze login wordt weergegeven als een automatische invulsuggestie.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Naadloos online afrekenen" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Ontwikkelaars-vriendelijke SSH-toegang" }, - "newSshNudgeBody": { - "message": "Sla je sleutels op en verbind met de SSH-agent voor snelle, versleutelde authenticatie." + "newSshNudgeBodyOne": { + "message": "Sla je sleutels op en verbind met de SSH-agent voor snelle, versleutelde authenticatie.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Meer informatie over SSH-agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Herstarten" diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index de8dd70af43..e2d68c110cd 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index f154ac5c0ab..98095db6c1b 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index c770243568c..b643ee5aa75 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Twoja obecna organizacja posiada zasady, które nie pozwalają na dołączanie do więcej niż jednej organizacji. Skontaktuj się z administratorami swojej organizacji lub zarejestruj się z innego konta Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "Członkowie organizacji, którzy nie są właścicielami lub administratorami i są już członkami innej organizacji zostaną usunięci z Twojej organizacji." - }, "singleOrgPolicyMemberWarning": { "message": "Niezgodni członkowie zostaną objęci cofniętym statusem do czasu opuszczenia przez nich wszystkich innych organizacji. Administratorzy są zwolnieni i mogą przywrócić członków po osiągnięciu zgodności." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fraza odcisku palca:" }, - "removeUsers": { - "message": "Usuń użytkowników" - }, - "revokeUsers": { - "message": "Unieważnij użytkowników" - }, - "restoreUsers": { - "message": "Przywróć użytkowników" - }, "error": { "message": "Błąd" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Połączenie domeny pozwala członkom na pominięcie pola identyfikatora SSO podczas logowania za pomocą SSO." }, - "verifyDomain": { - "message": "Zweryfikuj domenę" - }, - "reverifyDomain": { - "message": "Zweryfikuj ponownie domenę" - }, "copyDnsTxtRecord": { "message": "Skopiuj rekord DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Skopiuj i wklej rekord TXT do dostawcy DNS." }, - "domainNameInputHint": { - "message": "Przykład: mydomain.com. Subdomeny wymagają osobnych wpisów celem weryfikacji." - }, - "automaticDomainVerification": { - "message": "Automatyczna weryfikacja domeny" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden spróbuje zweryfikować domenę 3 razy w ciągu pierwszych 72 godzin. Jeśli nie można zweryfikować domeny, sprawdź rekord DNS w swoim serwerze i sprawdź go ręcznie. Domena zostanie usunięta z Twojej organizacji w ciągu 7 dni, jeśli nie zostanie zweryfikowana" - }, - "invalidDomainNameMessage": { - "message": "Wprowadzone dane są niepoprawne. Format: mydomain.com. Subdomeny wymagają osobnych wpisów celem weryfikacji." - }, "removeDomain": { "message": "Usuń domenę" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domena została zapisana" }, - "domainVerified": { - "message": "Domena zweryfikowana" - }, "duplicateDomainError": { "message": "Nie możesz dwukrotnie dodać tej samej domeny." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nie została zweryfikowana. Sprawdź swój rekord DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Zweryfikowana" - }, - "domainStatusUnverified": { - "message": "Niezweryfikowana" - }, "domainNameTh": { "message": "Nazwa" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "Zweryfikowano $DOMAIN$", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ nie została zweryfikowana", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Weryfikacja dla tej akcji jest wymagana. Ustaw kod PIN, aby kontynuować." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Zarządzaj płatnościami z portalu dostawcy" }, + "continueSettingUp": { + "message": "Kontynuuj konfigurację Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Kontynuuj konfigurację darmowego okresu próbnego Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Kontynuuj konfigurację Menedżera Haseł Bitwarden" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Kontynuuj konfigurację darmowego okresu próbnego w Menedżerze haseł Bitwarden" }, + "continueSettingUpSecretsManager": { + "message": "Kontynuuj konfigurację Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Kontynuuj konfigurację darmowego okresu próbnego Menedżera Sekretnych Bitwarden" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Ważna informacja" - }, - "setupTwoStepLogin": { - "message": "Skonfiguruj dwustopniowe logowanie" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden wyśle kod na Twój adres e-mail w celu zweryfikowania logowania z nowych urządzeń, począwszy od lutego 2025 r." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Możesz skonfigurować dwustopniowe logowanie jako alternatywny sposób ochrony konta lub zmienić swój adres e-mail, do którego masz dostęp." - }, - "remindMeLater": { - "message": "Przypomnij mi później" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Czy masz pewny dostęp do swojego adresu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nie, nie mam" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Tak, mam pewny dostęp do mojego adresu e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Włącz dwustopniowe logowanie" - }, - "changeAcctEmail": { - "message": "Zmień adres e-mail konta" - }, "removeMembers": { "message": "Usuń członków" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Oszczędzaj czas dzięki autouzupełnianiu" }, - "newLoginNudgeBody": { - "message": "Dołącz stronę internetową, aby ten login pojawił się jako sugestia autouzupełniania." + "newLoginNudgeBodyOne": { + "message": "Dołącz", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "stronę internetową, ", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "aby ten login pojawił się jako sugestia autouzupełniania.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Bezproblemowe zamówienia online" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Przyjazny dla deweloperów dostęp SSH" }, - "newSshNudgeBody": { - "message": "Przechowuj swoje klucze i połącz się z agentem SSH dla szybkiego, szyfrowanego uwierzytelniania." + "newSshNudgeBodyOne": { + "message": "Przechowuj swoje klucze i połącz się z agentem SSH dla szybkiego, szyfrowanego uwierzytelniania.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Dowiedz się więcej o agencie SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Zrestartuj" diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index 7158f60e2a2..160ed3b52a8 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Sua organização atual tem uma política que não permite que você entre em mais de uma organização. Por favor, entre em contato com os administradores da sua organização ou cadastre-se a partir de uma conta do Bitwarden diferente." }, - "singleOrgPolicyWarning": { - "message": "Os membros da organização que não são Donos ou Administradores, e já são membros de outra organização serão removidos da sua organização." - }, "singleOrgPolicyMemberWarning": { "message": "Membros não conformes serão colocados no estado revogado até que saiam de todas as outras organizações. Administradores estão isentos e podem restaurar os membros assim que cumprir." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Frase biométrica:" }, - "removeUsers": { - "message": "Remover Usuários" - }, - "revokeUsers": { - "message": "Revogar Usuários" - }, - "restoreUsers": { - "message": "Restaurar Usuários" - }, "error": { "message": "Erro" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Conectar um domínio permite que os membros pulem o campo identificador SSO durante o Login com SSO." }, - "verifyDomain": { - "message": "Verificar domínio" - }, - "reverifyDomain": { - "message": "Reverificar domínio" - }, "copyDnsTxtRecord": { "message": "Copiar registro do DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copie e cole o registro TXT no seu provedor de DNS." }, - "domainNameInputHint": { - "message": "Exemplo: meudominio.com. Subdomínios requerem entradas separadas para serem verificadas." - }, - "automaticDomainVerification": { - "message": "Verificação de domínio automática" - }, - "automaticDomainVerificationProcess": { - "message": "O Bitwarden tentará verificar o domínio 3 vezes durante as primeiras 72 horas. Se o domínio não puder ser verificado, cheque o registro DNS no seu host e o verifique manualmente. O domínio será removido da sua organização em 7 dias se não for verificado" - }, - "invalidDomainNameMessage": { - "message": "A entrada não está em um formato válido. Formato: meudominio.com. Subdomínios requerem entradas separadas a serem verificadas." - }, "removeDomain": { "message": "Remover domínio" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domínio salvo" }, - "domainVerified": { - "message": "Domínio verificado" - }, "duplicateDomainError": { "message": "Você não pode reivindicar o mesmo domínio duas vezes." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ não verificado. Verifique seu registro DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verificado" - }, - "domainStatusUnverified": { - "message": "Não verificado" - }, "domainNameTh": { "message": "Nome" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verificado", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ não verificado", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verificação necessária para esta ação. Defina um PIN para continuar." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Gerenciar faturamento a partir do Portal do Provedor" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue a configurar a sua avaliação gratuita do Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue a configurar sua avaliação gratuita do Gerenciador de Senhas do Bitwarden" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue configurando seu teste gratuito do Gerenciador de Segredos do Bitwarden" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Configurar login em duas etapas" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden enviará um código para o seu e-mail para verificar novos dispositivos a partir de fevereiro de 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Você pode configurar o login em duas etapas como uma forma alternativa de proteger sua conta ou mudar seu e-mail para um que você possa acessar." - }, - "remindMeLater": { - "message": "Lembre-me depois" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Você tem acesso ao seu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Não tenho" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sim, eu tenho" - }, - "turnOnTwoStepLogin": { - "message": "Ativar login em duas etapas" - }, - "changeAcctEmail": { - "message": "Alterar e-mail" - }, "removeMembers": { "message": "Remover membro?" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index afe0491a0a9..209551d7887 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "A sua organização atual tem uma política que não lhe permite aderir a mais do que uma organização. Por favor, contacte os administradores da sua organização ou registe-se a partir de uma conta Bitwarden diferente." }, - "singleOrgPolicyWarning": { - "message": "Os membros da organização que não sejam proprietários ou administradores e que já sejam membros de outra organização serão removidos da sua organização." - }, "singleOrgPolicyMemberWarning": { "message": "Os membros não conformes serão colocados no estado revogado até deixarem todas as outras organizações. Os administradores estão isentos e podem restaurar os membros assim que a conformidade for cumprida." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Frase de impressão digital:" }, - "removeUsers": { - "message": "Remover utilizadores" - }, - "revokeUsers": { - "message": "Revogar utilizadores" - }, - "restoreUsers": { - "message": "Restaurar utilizadores" - }, "error": { "message": "Erro" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "A ligação de um domínio permite aos membros ignorar o campo do identificador SSO durante o início de sessão com SSO." }, - "verifyDomain": { - "message": "Verificar domínio" - }, - "reverifyDomain": { - "message": "Verificar domínio novamente" - }, "copyDnsTxtRecord": { "message": "Copiar registo DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copie e cole o registo TXT no seu fornecedor de DNS." }, - "domainNameInputHint": { - "message": "Exemplo: omeudominio.com. Os subdomínios requerem campos separados para serem verificados." - }, - "automaticDomainVerification": { - "message": "Verificação automática de domínios" - }, - "automaticDomainVerificationProcess": { - "message": "O Bitwarden tentará verificar o domínio 3 vezes durante as primeiras 72 horas. Se o domínio não puder ser verificado, verifique o registo DNS no seu anfitrião e verifique manualmente. O domínio será removido da sua organização em 7 dias se não for verificado" - }, - "invalidDomainNameMessage": { - "message": "O campo não é um formato válido. Formato: omeudominio.com. Os subdomínios requerem campos separados para serem verificados." - }, "removeDomain": { "message": "Remover domínio" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domínio guardado" }, - "domainVerified": { - "message": "Domínio verificado" - }, "duplicateDomainError": { "message": "Não é possível reivindicar o mesmo domínio duas vezes." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ não verificado. Verifique o seu registo DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verificado" - }, - "domainStatusUnverified": { - "message": "Não verificado" - }, "domainNameTh": { "message": "Nome" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verificado", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ não verificado", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "É necessária uma verificação para esta ação. Defina um PIN para continuar." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Gira a faturação a partir do Portal do fornecedor" }, + "continueSettingUp": { + "message": "Continuar a configurar o Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continuar a configurar a sua versão experimental gratuita do Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continuar a configurar o Gestor de Palavras-passe do Bitwarden" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continuar a configurar a sua versão experimental gratuita do Gestor de Palavras-passe do Bitwarden" }, + "continueSettingUpSecretsManager": { + "message": "Continuar a configurar o Gestor de Segredos do Bitwarden" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continuar a configurar a sua versão experimental gratuita do Gestor de Segredos do Bitwarden" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Definir a verificação de dois passos" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "O Bitwarden enviará um código para o e-mail da sua conta para verificar as credenciais de novos dispositivos a partir de fevereiro de 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Pode configurar a verificação de dois passos como forma alternativa de proteger a sua conta ou alterar o seu e-mail para um a que possa aceder." - }, - "remindMeLater": { - "message": "Lembrar-me mais tarde" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Tem um acesso fiável ao seu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Não, não tenho" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sim, consigo aceder de forma fiável ao meu e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Ativar a verificação de dois passos" - }, - "changeAcctEmail": { - "message": "Alterar o e-mail da conta" - }, "removeMembers": { "message": "Remover membros" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Poupe tempo com o preenchimento automático" }, - "newLoginNudgeBody": { - "message": "Inclua um site para que esta credencial apareça como uma sugestão de preenchimento automático." + "newLoginNudgeBodyOne": { + "message": "Inclua um", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "site", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "para que esta credencial apareça como uma sugestão de preenchimento automático.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Pagamentos online sem problemas" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Acesso SSH de fácil utilização pelos programadores" }, - "newSshNudgeBody": { - "message": "Guarde as suas chaves e ligue-se ao agente SSH para uma autenticação rápida e encriptada." + "newSshNudgeBodyOne": { + "message": "Guarde as suas chaves e ligue-se ao agente SSH para uma autenticação rápida e encriptada.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Saiba mais sobre o agente SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Reiniciar" diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 9b4dbca484e..44335176a4e 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Organizația dvs. actuală are o politică care nu vă permite să vă alăturați la mai mult de o organizație. Vă rugăm să contactați administratorii organizației sau să vă înscrieți dintr-un cont Bitwarden diferit." }, - "singleOrgPolicyWarning": { - "message": "Membrii organizației care nu sunt proprietari sau administratori și care sunt deja membri ai unei alte organizații vor fi înlăturați din organizație." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Eliminare utilizatori" - }, - "revokeUsers": { - "message": "Revocare utilizatori" - }, - "restoreUsers": { - "message": "Restabilire utilizatori" - }, "error": { "message": "Eroare" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index 8bcaf573309..c7c70ef81bf 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Политика вашей текущей организации не позволяет вам присоединиться к более чем одной организации. Пожалуйста, свяжитесь с администраторами вашей организации или авторизуйтесь под другим аккаунтом Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "Пользователи организации, которые не являются владельцами или администраторами и уже входят в другую организацию, будут удалены из вашей организации." - }, "singleOrgPolicyMemberWarning": { "message": "Члены, не соблюдающие требования, будут аннулированы до тех пор, пока не покинут все остальные организации. Администраторы имеют этих ограничений и могут восстанавливать членов, если они соответствуют требованиям." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Фраза отпечатка:" }, - "removeUsers": { - "message": "Удалить пользователей" - }, - "revokeUsers": { - "message": "Отозвать пользователей" - }, - "restoreUsers": { - "message": "Восстановить пользователей" - }, "error": { "message": "Ошибка" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Подключение домена позволит пользователям пропускать поле идентификатора SSO при авторизации с помощью SSO." }, - "verifyDomain": { - "message": "Верифицировать домен" - }, - "reverifyDomain": { - "message": "Повторно верифицировать домен" - }, "copyDnsTxtRecord": { "message": "Скопировать запись DNS TXT" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Скопируйте и вставьте TXT-запись к своему провайдеру DNS." }, - "domainNameInputHint": { - "message": "Пример: mydomain.com. Для верификации субдоменов необходимы отдельные записи." - }, - "automaticDomainVerification": { - "message": "Автоматическая верификация домена" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden попытается верифицировать домен 3 раза в течение первых 72 часов. Если верифицировать домен не удастся, проверьте DNS-запись на вашем хосте и верифицируйте вручную. Домен будет удален из вашей организации через 7 дней, если он не будет верифицирован" - }, - "invalidDomainNameMessage": { - "message": "Введенные данные не соответствуют формату. Формат: mydomain.com. Для верификации субдоменов необходимы отдельные записи." - }, "removeDomain": { "message": "Удалить домен" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Домен сохранен" }, - "domainVerified": { - "message": "Домен верифицирован" - }, "duplicateDomainError": { "message": "Вы не можете заявить один и тот же домен дважды." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ не верифицирован. Проверьте запись DNS.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Верифицирован" - }, - "domainStatusUnverified": { - "message": "Неверифицирован" - }, "domainNameTh": { "message": "Название" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ верифицирован", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ не верифицирован", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Для этого действия требуется верификация. Для продолжения введите PIN-код." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Управление биллингом на портале провайдера" }, + "continueSettingUp": { + "message": "Продолжить настройку Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Продолжить настройку бесплатной пробной версии Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Продолжить настройку менеджера паролей Bitwarden" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Продолжить настройку бесплатной пробной версии Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Продолжить настройку менеджера секретов Bitwarden" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Продолжить настройку бесплатной пробной версии менеджера секретов Bitwarden" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Важное уведомление" - }, - "setupTwoStepLogin": { - "message": "Настроить двухэтапную аутентификацию" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Начиная с февраля 2025 года Bitwarden будет отправлять код на электронную почту вашего аккаунта для подтверждения авторизации с новых устройств." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "В качестве альтернативного способа защиты учетной записи вы можете настроить двухэтапную аутентификацию или сменить электронную почту на ту, к которой вы можете получить доступ." - }, - "remindMeLater": { - "message": "Напомнить позже" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Есть ли у вас надежный доступ к электронной почте $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Нет, не знаю" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, я имею надежный доступ к своей электронной почте" - }, - "turnOnTwoStepLogin": { - "message": "Включить двухэтапную аутентификацию" - }, - "changeAcctEmail": { - "message": "Изменить email аккаунта" - }, "removeMembers": { "message": "Удалить участников" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Экономьте время с помощью автозаполнения" }, - "newLoginNudgeBody": { - "message": "Включите сайт, чтобы этот логин отображался в качестве предложения для автозаполнения." + "newLoginNudgeBodyOne": { + "message": "Включите", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "сайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "чтобы этот логин отображался в качестве предложения для автозаполнения.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Оформление заказа через интернет" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Удобный для разработчиков SSH-доступ" }, - "newSshNudgeBody": { - "message": "Храните свои ключи и подключайтесь с помощью агента SSH для быстрой и зашифрованной аутентификации." + "newSshNudgeBodyOne": { + "message": "Храните свои ключи и подключайтесь с помощью агента SSH для быстрой и зашифрованной аутентификации.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Узнайте больше об агенте SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Перезапустить" diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index 19034fef189..d1d8149c3cf 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index 8955be145a2..839d15019e2 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Vaša súčasná organizácia má pravidlo, ktoré vám nedovoľuje pripojiť sa k viac než jednej organizácii. Kontaktujte, prosím, administrátorov vašej organizácie alebo sa prihláste prostredníctvom iného Bitwarden účtu." }, - "singleOrgPolicyWarning": { - "message": "Členovia organizácie, ktorí nie sú vlastníkmi alebo administrátormi a už sú členmi inej organizácie, budú odstránení z vašej organizácie." - }, "singleOrgPolicyMemberWarning": { "message": "Členovia, ktorí nedodržiavajú pravidlo, budú zaradení do zrušeného stavu, kým neopustia všetky ostatné organizácie. Správcovia majú výnimku a môžu obnoviť členov po splnení požiadaviek pravidiel organizácie." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fráza odtlačku prsta:" }, - "removeUsers": { - "message": "Odstrániť používateľov" - }, - "revokeUsers": { - "message": "Odvolať používateľov" - }, - "restoreUsers": { - "message": "Obnoviť používateľov" - }, "error": { "message": "Chyba" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Pripojenie domény umožňuje členom preskočiť počas prihlasovania sa prostredníctvom SSO pole identifikátora SSO." }, - "verifyDomain": { - "message": "Overiť doménu" - }, - "reverifyDomain": { - "message": "Opätovne overiť doménu" - }, "copyDnsTxtRecord": { "message": "Kopírovať DNS TXT záznam" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Kopírujte TXT záznam k vášmu poskytovateľovi DNS." }, - "domainNameInputHint": { - "message": "Príklad: mydomain.com. Pre overenie subdomén musia byť tieto každá zadaná individuálne." - }, - "automaticDomainVerification": { - "message": "Automatické Overenie Domény" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden sa pokúsi overiť doménu 3 krát počas prvých 72 hodín. Ak sa doménu nepodarilo overiť, skontrolujte DNS záznam u svojho hostiteľa a overte manuálne. Doména bude z organizácie odstránená po 7 dňoch ak nie je overená" - }, - "invalidDomainNameMessage": { - "message": "Zadaný neplatný formát. Formát: mydomain.com. Pre overenie subdomén musia byť tieto každá zadaná individuálne." - }, "removeDomain": { "message": "Odstrániť doménu" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Doména uložená" }, - "domainVerified": { - "message": "Doména overená" - }, "duplicateDomainError": { "message": "Nemôžete si privlastniť tú istú doménu dva krát." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ nie je overená. Overte si DNS záznam.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Overená" - }, - "domainStatusUnverified": { - "message": "Neoverená" - }, "domainNameTh": { "message": "Názov" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ overená", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ neoverená", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Pre túto akciu sa vyžaduje overenie. Ak chcete pokračovať, nastavte PIN kód." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Spravujte fakturáciu cez portál poskytovateľa" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Pokračujte v nastavovaní vašej bezplatnej skúšobnej doby Bitwardenu" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Pokračujte v nastavovaní vašej bezplatnej skúšobnej doby Bitwarden Správcu Hesiel" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Pokračujte v nastavovaní vašej bezplatnej skúšobnej doby Bitwarden správcu tajomstiev" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Dôležité upozornenie" - }, - "setupTwoStepLogin": { - "message": "Nastaviť dvojstupňové prihlásenie" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden vám od februára 2025 pošle na e-mail vášho účtu kód na overenie prihlásenia z nových zariadení." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Ako alternatívny spôsob ochrany svojho účtu môžete nastaviť dvojstupňové prihlásenie alebo zmeniť e-mail na taký, ku ktorému máte prístup." - }, - "remindMeLater": { - "message": "Pripomenúť neskôr" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Máte spoľahlivý prístup k svojmu e-mailu, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nie, nemám" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Áno, mám spoľahlivý prístup k svojmu e-mailu" - }, - "turnOnTwoStepLogin": { - "message": "Zapnúť dvojstupňové prihlásenie" - }, - "changeAcctEmail": { - "message": "Zmeniť e-mail účtu" - }, "removeMembers": { "message": "Odstrániť členov" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index b9a7877100e..766c1edbb15 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Preverjena" - }, - "domainStatusUnverified": { - "message": "Nepreverjena" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index f8c75188e4b..244f4f0e6a7 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Ваша тренутна организација има смернице које не дозвољавају да се придружите више организација. Молимо контактирајте администраторе своје организације или се пријавите са другим Bitwarden налога." }, - "singleOrgPolicyWarning": { - "message": "Чланови организације који нису власници или администратори и који су већ чланови друге организације биће уклоњени из ваше организације." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Уклони кориснике" - }, - "revokeUsers": { - "message": "Опозови кориснике" - }, - "restoreUsers": { - "message": "Врати кориснике" - }, "error": { "message": "Грешка" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Повезивање домена омогућава члановима да прескоче SSO идентификацију при пријављивање са SSO." }, - "verifyDomain": { - "message": "Потврди домен" - }, - "reverifyDomain": { - "message": "Поново верификујте домен" - }, "copyDnsTxtRecord": { "message": "Копирати DNS TXT запис" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Копирајте и налепите TXT запис у DNS провајдер." }, - "domainNameInputHint": { - "message": "Пример: mydomain.com. Под-домени захтевају посебне уносе да би били верификовани." - }, - "automaticDomainVerification": { - "message": "Аутоматска верификација домена" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden ће покушати да верификује домен 3 пута током прва 72 сата. Ако домен не може да се верификује, проверите DNS запис у вашен хосту и верификујте ручно. Домен ће бити уклоњен из ваше организације за 7 дана ако не буде верификован" - }, - "invalidDomainNameMessage": { - "message": "Унос није важећи формат. Формат: mydomain.com. Под-домени захтевају посебне уносе за проверу." - }, "removeDomain": { "message": "Уклони домен" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Домен сачуван" }, - "domainVerified": { - "message": "Домен верификован" - }, "duplicateDomainError": { "message": "Не можете два пута тражити исти домен." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ није проверен. Проверите ваш DNS запис.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Проверено" - }, - "domainStatusUnverified": { - "message": "Није потврђен" - }, "domainNameTh": { "message": "Име" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ проверен", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ није проверен", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "За ову радњу је потребна верификација. Подесите ПИН да бисте наставили." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Управљајте наплатом из Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Наставите са подешавањем бесплатне пробне верзије Bitwarden-а" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Наставите са подешавањем бесплатне пробне верзије Bitwarden менаџер лозинки" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Наставите са подешавањем бесплатне пробне верзије Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Важно обавештење" - }, - "setupTwoStepLogin": { - "message": "Поставити дво-степенску пријаву" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden ће послати кôд на имејл вашег налога за верификовање пријављивања са нових уређаја почевши од фебруара 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Можете да подесите пријаву у два корака као алтернативни начин да заштитите свој налог или да промените свој имејл у један који можете да приступите." - }, - "remindMeLater": { - "message": "Подсети ме касније" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Да ли имате поуздан приступ својим имејлом, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Не, ненам" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, могу поуздано да приступим овим имејлом" - }, - "turnOnTwoStepLogin": { - "message": "Упалити дво-степенску пријаву" - }, - "changeAcctEmail": { - "message": "Променити имејл налога" - }, "removeMembers": { "message": "Уклони чланове" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Уштедите време са ауто-пуњењем" }, - "newLoginNudgeBody": { - "message": "Укључите веб страницу тако да се ова пријава појављује као предлог за ауто-пуњење." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Лако онлајн плачање" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Лак SSH приступ" }, - "newSshNudgeBody": { - "message": "Чувајте кључеве и повежите се са SSH агент за брзу, шифровану аутентификацију." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Поново покрени" diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index c01ad4a6d97..9fdaed29b9d 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index 9e85378365f..96218aa5030 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Din nuvarande organisation har en policy som hindrar dig från att gå med i fler än en organisation. Vänligen kontakta din organisations administratörer eller registrera ett annat Bitwarden-konto." }, - "singleOrgPolicyWarning": { - "message": "Medlemmar som inte är ägare eller administratörer och redan är med i en annan organisation kommer att tas bort från organisationen." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Ta bort användare" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Återställ användare" - }, "error": { "message": "Fel" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verifiera domän" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Kopiera DNS TXT-post" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verifierad" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Namn" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verifiering krävs för denna åtgärd. Ange en PIN-kod för att fortsätta." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index f154ac5c0ab..98095db6c1b 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index 3d21ff1aef3..bbf4f1da178 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index ba8a0bf8991..1853e47a8fb 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Mevcut kuruluşunuzun birden fazla kuruluşa katılmanıza izin vermeyen bir ilkesi var. Lütfen kuruluş yöneticilerinizle iletişime geçin veya farklı bir Bitwarden hesabı açın." }, - "singleOrgPolicyWarning": { - "message": "Sahip veya yönetici olmayan ve zaten başka bir kuruluşun üyesi olan kuruluş üyeleri kuruluşunuzdan kaldırılır." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Parmak izi ifadesi:" }, - "removeUsers": { - "message": "Kullanıcıları kaldır" - }, - "revokeUsers": { - "message": "Kullanıcıları iptal et" - }, - "restoreUsers": { - "message": "Kullanıcıları geri yükle" - }, "error": { "message": "Hata" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Bir alan adının bağlanması, üyelerin SSO ile Oturum Açma sırasında SSO tanımlayıcı alanını atlamalarına olanak tanır." }, - "verifyDomain": { - "message": "Alan adını doğrula" - }, - "reverifyDomain": { - "message": "Alan adını yeniden doğrula" - }, "copyDnsTxtRecord": { "message": "DNS TXT kaydını kopyala" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "TXT kaydını kopyalayıp DNS sağlayıcınıza yapıştırın." }, - "domainNameInputHint": { - "message": "Örnek: mydomain.com. Alt alan adlarının doğrulanması için ayrı kayıtlar gerekir." - }, - "automaticDomainVerification": { - "message": "Otomatik Alan Adı Doğrulaması" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden, ilk 72 saat içinde etki alanını 3 kez doğrulamaya çalışacak. Alan doğrulanamıyorsa barındırıcınızdaki DNS kaydını kontrol edin ve manuel olarak doğrulayın. Alan adı, doğrulanmamışsa kuruluşunuzdan 7 gün içinde kaldırılacaktır" - }, - "invalidDomainNameMessage": { - "message": "Giriş geçerli bir format değil. Biçim: mydomain.com. Alt alan adlarının doğrulanması için ayrı girişler gerekir." - }, "removeDomain": { "message": "Alan adını kaldır" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Alan adı kaydedildi" }, - "domainVerified": { - "message": "Alan adı doğrulandı" - }, "duplicateDomainError": { "message": "Aynı etki alanını iki kez talep edemezsiniz." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ doğrulanmadı. DNS kaydınızı kontrol edin.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Doğrulandı" - }, - "domainStatusUnverified": { - "message": "Doğrulanmadı" - }, "domainNameTh": { "message": "İsim" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ doğrulandı", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ doğrulanmadı", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Bu işlem için doğrulama gerekiyor. Devam etmek için bir PIN belirleyin." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Bitwarden’ı kurmaya devam et" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Bitwarden Parola Yöneticisi’ni kurmaya devam et" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Bitwarden Secrets Manager’ı kurmaya devam et" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Önemli uyarı" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Daha sonra hatırlat" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Otomatik doldurmayla zaman kazanın" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Bu hesabın otomatik doldurma önerisi olarak görünmesi için bir", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "web sitesi", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "ekleyin.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Kesintisiz çevrimiçi alışveriş" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Yeniden başlat" diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index 45780d95923..492e07023b3 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Ваша організація має політику, що не дозволяє вам приєднуватися до більш, ніж однієї організації. Будь ласка, зв'яжіться з адміністратором вашої організації, або увійдіть з іншим обліковим записом Bitwarden." }, - "singleOrgPolicyWarning": { - "message": "Учасники організації, які не є власниками чи адміністраторами, але вже є учасниками іншої організації, будуть вилучені з вашої організації." - }, "singleOrgPolicyMemberWarning": { "message": "Учасникам, які не відповідають вимогам, буде призначено стан \"відкликано\" доки вони не покинуть інші організації. Адміністратори є винятком і можуть відновити учасників у разі відповідності вимогам." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Фраза відбитка:" }, - "removeUsers": { - "message": "Вилучити користувачів" - }, - "revokeUsers": { - "message": "Відкликати користувачів" - }, - "restoreUsers": { - "message": "Відновити користувачів" - }, "error": { "message": "Помилка" }, @@ -6303,13 +6291,13 @@ "message": "Спонсоровані родини" }, "noSponsoredFamiliesMessage": { - "message": "No sponsored families" + "message": "Немає спонсорованих родин" }, "nosponsoredFamiliesDetails": { - "message": "Sponsored non-member families plans will display here" + "message": "Тут буде показано спонсоровані плани родин, які не є учасниками" }, "sponsorshipFreeBitwardenFamilies": { - "message": "Members of your organization are eligible for Free Bitwarden Families. You can sponsor Free Bitwarden Families for employees who are not a member of your Bitwarden organization. Sponsoring a non-member requires an available seat within your organization." + "message": "Учасники вашої організації мають право на безплатний план Bitwarden Families. Ви можете спонсорувати безплатні плани Bitwarden Families для співробітників, які не є учасниками вашої організації Bitwarden. Для спонсорування користувачів, які не є учасниками організації, необхідні вільні місця в межах вашої організації." }, "sponsoredFamiliesRemoveActiveSponsorship": { "message": "Якщо вилучити активне спонсорство, місце у вашій організації стане доступним після дати оновлення спонсорованої організації." @@ -6321,13 +6309,13 @@ "message": "Активуйте сьогодні безплатний тарифний план Bitwarden Families, щоб зберігати свої дані захищеними, навіть коли ви не на роботі." }, "sponsoredFamiliesIncludeMessage": { - "message": "The Bitwarden for Families plan includes" + "message": "План Bitwarden Families включає" }, "sponsoredFamiliesPremiumAccess": { "message": "Преміумдоступ до 6 користувачів" }, "sponsoredFamiliesSharedCollectionsForFamilyMembers": { - "message": "Shared collections for family members" + "message": "Спільні збірки для учасників родини" }, "memberFamilies": { "message": "Родини учасників" @@ -6342,7 +6330,7 @@ "message": "Учасники вашої організації мають право на безплатний план Bitwarden Families. Тут ви можете переглянути учасників, які спонсорують родинну організацію." }, "organizationHasMemberMessage": { - "message": "A sponsorship cannot be sent to $EMAIL$ because they are a member of your organization.", + "message": "Спонсорство не можна надіслати на $EMAIL$, оскільки цей користувач є учасником вашої організації.", "placeholders": { "email": { "content": "$1", @@ -6402,7 +6390,7 @@ "message": "Обліковий запис активовано" }, "revokeAccountMessage": { - "message": "Revoke account $NAME$", + "message": "Відкликати обліковий запис $NAME$", "placeholders": { "name": { "content": "$1", @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Під'єднання домену дозволяє учасникам не використовувати поле ідентифікатора SSO під час входу з SSO." }, - "verifyDomain": { - "message": "Підтвердити домен" - }, - "reverifyDomain": { - "message": "Повторно підтвердити домен" - }, "copyDnsTxtRecord": { "message": "Копіювати TXT-запис для DNS" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Скопіюйте і вставте TXT-запис у відповідне поле свого DNS-провайдера." }, - "domainNameInputHint": { - "message": "Зразок: mydomain.com. Для піддоменів потрібно підтвердити окремі записи." - }, - "automaticDomainVerification": { - "message": "Автоматичне підтвердження доменів" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden намагатиметься підтвердити домен 3 рази впродовж 72 годин. Якщо не вдасться підтвердити домен, перевірте DNS-запис у вашого провайдера й підтвердьте його вручну. Якщо домен не буде підтверджено протягом 7 днів, його буде вилучено з вашої організації" - }, - "invalidDomainNameMessage": { - "message": "Неправильний формат введення. Правильний формат: mydomain.com. Для підтвердження піддоменів потрібно ввести окремі записи." - }, "removeDomain": { "message": "Вилучити домен" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Домен збережено" }, - "domainVerified": { - "message": "Домен підтверджено" - }, "duplicateDomainError": { "message": "Не можна запитати той самий домен двічі." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ не підтверджено. Перевірте свій DNS-запис.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Підтверджено" - }, - "domainStatusUnverified": { - "message": "Не підтверджено" - }, "domainNameTh": { "message": "Ім'я" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "Домен $DOMAIN$ підтверджено", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "Домен $DOMAIN$ не підтверджено", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Ця дія потребує підтвердження. Встановіть PIN-код, щоб продовжити." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Керування рахунками на порталі провайдера" }, + "continueSettingUp": { + "message": "Продовжити налаштування Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Продовжити налаштування безплатної пробної версії Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Продовжити налаштування менеджера паролів Bitwarden" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Продовжити налаштування безплатної пробної версії менеджера паролів Bitwarden" }, + "continueSettingUpSecretsManager": { + "message": "Продовжити налаштування менеджера секретів Bitwarden" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Продовжити налаштування безплатної пробної версії менеджера секретів Bitwarden" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Важлива інформація" - }, - "setupTwoStepLogin": { - "message": "Налаштувати двоетапну перевірку" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden надсилатиме код підтвердження на електронну пошту вашого облікового запису під час входу з нових пристроїв, починаючи з лютого 2025 року." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Ви можете налаштувати двоетапну перевірку як альтернативний спосіб захисту свого облікового запису, або змінити електронну пошту на таку, до якої ви маєте доступ." - }, - "remindMeLater": { - "message": "Нагадати пізніше" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Ви маєте постійний доступ до своєї електронної пошти $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ні, не маю" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Так, я маю постійний доступ до своєї електронної пошти" - }, - "turnOnTwoStepLogin": { - "message": "Увімкнути двоетапну перевірку" - }, - "changeAcctEmail": { - "message": "Змінити адресу е-пошти" - }, "removeMembers": { "message": "Вилучити учасників" }, @@ -10397,7 +10304,7 @@ "message": "Не довіряти" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Це не довірена організація" }, "emergencyAccessTrustWarning": { "message": "Щоб захистити свій обліковий запис, підтверджуйте лише якщо ви надали цьому користувачу екстрений доступ, і його цифровий відбиток збігається з показаним в його обліковому записі." @@ -10406,7 +10313,7 @@ "message": "Щоб захистити свій обліковий запис, продовжуйте лише якщо ви є учасником цієї організації, маєте ввімкнене відновлення облікового запису, і показаний нижче цифровий відбиток збігається з відбитком організації." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Ця організація має політику компанії, яка розгорне для вас відновлення облікового запису. Розгортання дасть змогу адміністраторам організації змінювати ваш пароль. Продовжуйте тільки якщо ви впізнаєте організацію і наведена нижче фраза відбитка відповідає відбитку організації." }, "trustUser": { "message": "Довіряти користувачу" @@ -10614,10 +10521,10 @@ "message": "Не дозволяти учасникам розблокувати свій обліковий запис за допомогою PIN-коду." }, "upgradeForFullEventsMessage": { - "message": "Event logs are not stored for your organization. Upgrade to a Teams or Enterprise plan to get full access to organization event logs." + "message": "Для вашої організації не зберігаються записи подій. Перейдіть на план Teams або Enterprise, щоб отримати повний доступ до подій організації." }, "upgradeEventLogTitleMessage": { - "message": "Upgrade to see event logs from your organization." + "message": "Перейдіть на вищий тарифний план для доступу до записів подій вашої організації." }, "upgradeEventLogMessage": { "message": "Ці події є лише зразками. Вони не відображають реальних подій у вашій організації Bitwarden." @@ -10635,39 +10542,58 @@ "message": "Новий бізнес-підрозділ" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Заощаджуйте час з автозаповненням" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Включити", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Вебсайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "щоб цей запис з'являвся у пропозиціях автозаповнення.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Швидке оформлення замовлень" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "За допомогою записів для карток можна безпечно й точно заповнювати платіжні форми." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Спростіть створення облікових записів" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "За допомогою записів для посвідчень можна швидко заповнювати форми реєстрації чи контактів." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Захистіть свої конфіденційні дані" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "За допомогою нотаток можна надійно зберігати конфіденційні дані, як-от банківську інформацію або страхування." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "SSH-доступ для розробників" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Зберігайте свої ключі та під'єднуйтеся за допомогою SSH-агента для швидкої зашифрованої автентифікації.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Докладніше про SSH-агента", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { - "message": "Restart" + "message": "Перезапустити" }, "verifyProviderBankAccountWithStatementDescriptorWarning": { - "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 provider's subscription page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + "message": "Оплата з банківським рахунком доступна тільки для клієнтів у США. Вам необхідно буде підтвердити свій банківський рахунок. Ми здійснимо мікродепозит протягом наступних 1–2 робочих днів. Введіть код дескриптора з цього депозиту на сторінці передплати провайдера, щоб підтвердити банківський рахунок. Неможливість засвідчення банківського рахунку призведе до втрати платежу та припинення вашої передплати." } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 6779ec64c7d..67331a08138 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." }, - "singleOrgPolicyWarning": { - "message": "Organization members who are not owners or admins and are already a member of another organization will be removed from your organization." - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "Remove users" - }, - "revokeUsers": { - "message": "Revoke users" - }, - "restoreUsers": { - "message": "Restore users" - }, "error": { "message": "Error" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." }, - "verifyDomain": { - "message": "Verify domain" - }, - "reverifyDomain": { - "message": "Reverify domain" - }, "copyDnsTxtRecord": { "message": "Copy DNS TXT record" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "Copy and paste the TXT record into your DNS Provider." }, - "domainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be verified." - }, - "automaticDomainVerification": { - "message": "Automatic Domain Verification" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain can’t be verified, check the DNS record in your host and manually verify. The domain will be removed from your organization in 7 days if it is not verified" - }, - "invalidDomainNameMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be verified." - }, "removeDomain": { "message": "Remove domain" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "Domain saved" }, - "domainVerified": { - "message": "Domain verified" - }, "duplicateDomainError": { "message": "You can't claim the same domain twice." }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ not verified. Check your DNS record.", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "Verified" - }, - "domainStatusUnverified": { - "message": "Unverified" - }, "domainNameTh": { "message": "Name" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ not verified", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "Manage billing from the Provider Portal" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "Continue setting up your free trial of Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "Continue setting up your free trial of Bitwarden Password Manager" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "Continue setting up your free trial of Bitwarden Secrets Manager" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index 17c7b47b21e..4db0765b0dc 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "您当前的组织策略禁止您加入多个组织。请联系您的组织管理员,或从其他 Bitwarden 账户注册。" }, - "singleOrgPolicyWarning": { - "message": "不是所有者或管理员并且已是其他组织的成员的组织成员将从您的组织中移除。" - }, "singleOrgPolicyMemberWarning": { "message": "不符合要求的成员将被置于已撤销状态,直到他们退出所有其他组织,管理员不受此约束。达到要求后,管理员可以恢复他们的成员资格。" }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "指纹短语:" }, - "removeUsers": { - "message": "移除用户" - }, - "revokeUsers": { - "message": "撤销用户" - }, - "restoreUsers": { - "message": "恢复用户" - }, "error": { "message": "错误" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "连接域名允许成员在使用 SSO 登录时跳过 SSO 标识符字段。" }, - "verifyDomain": { - "message": "验证域名" - }, - "reverifyDomain": { - "message": "重新验证域名" - }, "copyDnsTxtRecord": { "message": "复制 DNS TXT 记录" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "复制并粘贴 TXT 记录到您的 DNS 提供商。" }, - "domainNameInputHint": { - "message": "示例:mydomain.com。子域名需要单独的条目进行验证。" - }, - "automaticDomainVerification": { - "message": "自动域名验证" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden 将在最初的 72 小时内尝试验证域名 3 次。如果此域名无法验证,请检查您主机中的 DNS 记录并手动验证。如果此域名在 7 天内未验证,它将被从您的组织中移除。" - }, - "invalidDomainNameMessage": { - "message": "输入的格式无效。格式:mydomain.com。子域名需要单独的条目进行验证。" - }, "removeDomain": { "message": "移除域名" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "域名已保存" }, - "domainVerified": { - "message": "域名已验证" - }, "duplicateDomainError": { "message": "您不能两次声明同一个域名。" }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ 无法验证。请检查您的 DNS 记录。", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "已验证" - }, - "domainStatusUnverified": { - "message": "未验证" - }, "domainNameTh": { "message": "域名" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ 已验证", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ 无法验证", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "此操作需要验证。设置一个 PIN 码以继续。" }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "从提供商门户管理账单" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "继续设置您的免费试用版 Bitwarden" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "继续设置您的免费试用版 Bitwarden 密码管理器" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "继续设置您的免费试用版 Bitwarden 机密管理器" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "重要通知" - }, - "setupTwoStepLogin": { - "message": "设置两步登录" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "从 2025 年 02 月起,当有来自新设备的登录时,Bitwarden 将向您的账户电子邮箱发送验证码。" - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "您可以设置两步登录作为保护账户的替代方法,或将您的电子邮箱更改为您可以访问的电子邮箱。" - }, - "remindMeLater": { - "message": "稍后提醒我" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "您能正常访问您的电子邮箱 $EMAIL$ 吗?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "不,我不能" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "是的,我可以正常访问我的电子邮箱" - }, - "turnOnTwoStepLogin": { - "message": "启用两步登录" - }, - "changeAcctEmail": { - "message": "更改账户电子邮箱" - }, "removeMembers": { "message": "移除成员" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "使用自动填充节省时间" }, - "newLoginNudgeBody": { - "message": "请包含网站,以便将此登录显示为自动填充建议。" + "newLoginNudgeBodyOne": { + "message": "包含一个", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "网站", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "因此此登录将显示为自动填充建议。", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "无缝在线结账" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "开发人员友好的 SSH 访问权限" }, - "newSshNudgeBody": { - "message": "存储您的密钥并与 SSH 代理连接,以进行快速、加密的身份验证。" + "newSshNudgeBodyOne": { + "message": "存储您的密钥并与 SSH 代理连接,以进行快速、加密的身份验证。", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "进一步了解 SSH 代理", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "重新启动" diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index e26f35eeff9..1bb389f4c9b 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -5054,9 +5054,6 @@ "singleOrgBlockCreateMessage": { "message": "您目前的組織原則不允許您加入多個組織。請聯絡您的組織管理員或從其他 Bitwarden 帳戶註冊。" }, - "singleOrgPolicyWarning": { - "message": "不是擁有者或管理員並且已經是其他組織的成員的組織成員將從您的組織中移除。" - }, "singleOrgPolicyMemberWarning": { "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." }, @@ -5886,15 +5883,6 @@ "fingerprintPhrase": { "message": "Fingerprint phrase:" }, - "removeUsers": { - "message": "移除使用者" - }, - "revokeUsers": { - "message": "撤銷使用者" - }, - "restoreUsers": { - "message": "還原使用者" - }, "error": { "message": "錯誤" }, @@ -7836,12 +7824,6 @@ "noDomainsSubText": { "message": "與網域連線後,成員在使用 SSO 登入期間就可以跳過 SSO 識別碼欄位。" }, - "verifyDomain": { - "message": "驗證網域" - }, - "reverifyDomain": { - "message": "重新驗證網域" - }, "copyDnsTxtRecord": { "message": "複製 DNS TXT 記錄" }, @@ -7851,18 +7833,6 @@ "dnsTxtRecordInputHint": { "message": "複製並貼上 TXT 記錄到您的 DNS 提供者。" }, - "domainNameInputHint": { - "message": "例如:mydomain.com。子網域需要單獨的條目進行驗證。" - }, - "automaticDomainVerification": { - "message": "自動網域驗證" - }, - "automaticDomainVerificationProcess": { - "message": "Bitwarden 將在 72 小時內嘗試驗證網域 3 次。如果無法驗證此網域,請檢查主機的 DNS 記錄並手動進行驗證。如果超過 7 天仍無法驗證,將從您的組織中移除該網域" - }, - "invalidDomainNameMessage": { - "message": "輸入的格式無效。格式:mydomain.com。子網域需要單獨的條目進行驗證。" - }, "removeDomain": { "message": "刪除網域" }, @@ -7875,9 +7845,6 @@ "domainSaved": { "message": "網域已儲存" }, - "domainVerified": { - "message": "已驗證網域" - }, "duplicateDomainError": { "message": "您不能再次聲明同一個網域。" }, @@ -7890,21 +7857,6 @@ } } }, - "domainNotVerified": { - "message": "$DOMAIN$ 未驗證。請檢查您的 DNS 記錄。", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainStatusVerified": { - "message": "已驗證" - }, - "domainStatusUnverified": { - "message": "未驗證" - }, "domainNameTh": { "message": "名稱" }, @@ -7938,24 +7890,6 @@ } } }, - "domainVerifiedEvent": { - "message": "$DOMAIN$ 已驗證", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, - "domainNotVerifiedEvent": { - "message": "$DOMAIN$ 未驗證", - "placeholders": { - "DOMAIN": { - "content": "$1", - "example": "bitwarden.com" - } - } - }, "verificationRequiredForActionSetPinToContinue": { "message": "Verification required for this action. Set a PIN to continue." }, @@ -9479,12 +9413,21 @@ "manageBillingFromProviderPortalMessage": { "message": "從提供者入口網站管理計費" }, + "continueSettingUp": { + "message": "Continue setting up Bitwarden" + }, "continueSettingUpFreeTrial": { "message": "繼續設定您的 Bitwarden 免費試用" }, + "continueSettingUpPasswordManager": { + "message": "Continue setting up Bitwarden Password Manager" + }, "continueSettingUpFreeTrialPasswordManager": { "message": "繼續設定您的 Bitwarden 密碼管理器免費試用" }, + "continueSettingUpSecretsManager": { + "message": "Continue setting up Bitwarden Secrets Manager" + }, "continueSettingUpFreeTrialSecretsManager": { "message": "繼續設定您的 Bitwarden 機密管理免費試用" }, @@ -10245,42 +10188,6 @@ } } }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "稍後再提醒我" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "啟動兩階段登入" - }, - "changeAcctEmail": { - "message": "更改帳號電子郵件位址" - }, "removeMembers": { "message": "Remove members" }, @@ -10637,8 +10544,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -10661,8 +10580,15 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { "message": "Restart" From 2146e0d79b692b057629e994f5af19ca382f861a Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 14:18:13 +0200 Subject: [PATCH 06/36] Autosync the updated translations (#14686) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/desktop/src/locales/af/messages.json | 108 ++++++-------- apps/desktop/src/locales/ar/messages.json | 108 ++++++-------- apps/desktop/src/locales/az/messages.json | 108 ++++++-------- apps/desktop/src/locales/be/messages.json | 108 ++++++-------- apps/desktop/src/locales/bg/messages.json | 108 ++++++-------- apps/desktop/src/locales/bn/messages.json | 108 ++++++-------- apps/desktop/src/locales/bs/messages.json | 108 ++++++-------- apps/desktop/src/locales/ca/messages.json | 108 ++++++-------- apps/desktop/src/locales/cs/messages.json | 108 ++++++-------- apps/desktop/src/locales/cy/messages.json | 108 ++++++-------- apps/desktop/src/locales/da/messages.json | 108 ++++++-------- apps/desktop/src/locales/de/messages.json | 118 +++++++-------- apps/desktop/src/locales/el/messages.json | 108 ++++++-------- apps/desktop/src/locales/en_GB/messages.json | 108 ++++++-------- apps/desktop/src/locales/en_IN/messages.json | 108 ++++++-------- apps/desktop/src/locales/eo/messages.json | 108 ++++++-------- apps/desktop/src/locales/es/messages.json | 112 +++++++------- apps/desktop/src/locales/et/messages.json | 108 ++++++-------- apps/desktop/src/locales/eu/messages.json | 108 ++++++-------- apps/desktop/src/locales/fa/messages.json | 108 ++++++-------- apps/desktop/src/locales/fi/messages.json | 108 ++++++-------- apps/desktop/src/locales/fil/messages.json | 108 ++++++-------- apps/desktop/src/locales/fr/messages.json | 108 ++++++-------- apps/desktop/src/locales/gl/messages.json | 108 ++++++-------- apps/desktop/src/locales/he/messages.json | 108 ++++++-------- apps/desktop/src/locales/hi/messages.json | 108 ++++++-------- apps/desktop/src/locales/hr/messages.json | 108 ++++++-------- apps/desktop/src/locales/hu/messages.json | 118 +++++++-------- apps/desktop/src/locales/id/messages.json | 108 ++++++-------- apps/desktop/src/locales/it/messages.json | 108 ++++++-------- apps/desktop/src/locales/ja/messages.json | 108 ++++++-------- apps/desktop/src/locales/ka/messages.json | 108 ++++++-------- apps/desktop/src/locales/km/messages.json | 108 ++++++-------- apps/desktop/src/locales/kn/messages.json | 108 ++++++-------- apps/desktop/src/locales/ko/messages.json | 108 ++++++-------- apps/desktop/src/locales/lt/messages.json | 108 ++++++-------- apps/desktop/src/locales/lv/messages.json | 112 +++++++------- apps/desktop/src/locales/me/messages.json | 108 ++++++-------- apps/desktop/src/locales/ml/messages.json | 108 ++++++-------- apps/desktop/src/locales/mr/messages.json | 108 ++++++-------- apps/desktop/src/locales/my/messages.json | 108 ++++++-------- apps/desktop/src/locales/nb/messages.json | 108 ++++++-------- apps/desktop/src/locales/ne/messages.json | 108 ++++++-------- apps/desktop/src/locales/nl/messages.json | 108 ++++++-------- apps/desktop/src/locales/nn/messages.json | 108 ++++++-------- apps/desktop/src/locales/or/messages.json | 108 ++++++-------- apps/desktop/src/locales/pl/messages.json | 108 ++++++-------- apps/desktop/src/locales/pt_BR/messages.json | 108 ++++++-------- apps/desktop/src/locales/pt_PT/messages.json | 108 ++++++-------- apps/desktop/src/locales/ro/messages.json | 108 ++++++-------- apps/desktop/src/locales/ru/messages.json | 108 ++++++-------- apps/desktop/src/locales/si/messages.json | 108 ++++++-------- apps/desktop/src/locales/sk/messages.json | 108 ++++++-------- apps/desktop/src/locales/sl/messages.json | 108 ++++++-------- apps/desktop/src/locales/sr/messages.json | 108 ++++++-------- apps/desktop/src/locales/sv/messages.json | 108 ++++++-------- apps/desktop/src/locales/te/messages.json | 108 ++++++-------- apps/desktop/src/locales/th/messages.json | 108 ++++++-------- apps/desktop/src/locales/tr/messages.json | 114 +++++++-------- apps/desktop/src/locales/uk/messages.json | 146 +++++++++---------- apps/desktop/src/locales/vi/messages.json | 108 ++++++-------- apps/desktop/src/locales/zh_CN/messages.json | 108 ++++++-------- apps/desktop/src/locales/zh_TW/messages.json | 108 ++++++-------- 63 files changed, 2997 insertions(+), 3879 deletions(-) diff --git a/apps/desktop/src/locales/af/messages.json b/apps/desktop/src/locales/af/messages.json index 32c67ba00f3..c3127cffe00 100644 --- a/apps/desktop/src/locales/af/messages.json +++ b/apps/desktop/src/locales/af/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premie word vereis" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ar/messages.json b/apps/desktop/src/locales/ar/messages.json index 559474b37f9..d9d4241e723 100644 --- a/apps/desktop/src/locales/ar/messages.json +++ b/apps/desktop/src/locales/ar/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "وكيل SSH هو خدمة موجهة للمطورين تسمح لك بتوقيع طلبات SSH مباشرة من مخزن Bitwarden الخاص بك." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "مطلوب اشتراك بريميوم" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "تم حفظ الملف على الجهاز. إدارة من تنزيلات جهازك." }, - "importantNotice": { - "message": "ملاحظة هامة" - }, - "setupTwoStepLogin": { - "message": "إعداد تسجيل الدخول بخطوتين" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "سيقوم Bitwarden بإرسال رمز إلى البريد الإلكتروني الخاص بحسابك للتحقق من تسجيلات الدخول من الأجهزة الجديدة ابتداءً من فبراير 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "يمكنك إعداد المصادقة الثنائية كطريقة بديلة لحماية حسابك أو تغيير بريدك الإلكتروني إلى بريد يمكنك الوصول إليه." - }, - "remindMeLater": { - "message": "ذكرني لاحقاً" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "هل لديك وصول موثوق إلى بريدك الإلكتروني، $EMAIL$؟", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "لا ليس لديّ" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "نعم، يمكنني الوصول بشكل موثوق إلى بريدي الإلكتروني" - }, - "turnOnTwoStepLogin": { - "message": "تشغيل تسجيل الدخول بخطوتين" - }, - "changeAcctEmail": { - "message": "تغيير البريد الإلكتروني الخاص بالحساب" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/az/messages.json b/apps/desktop/src/locales/az/messages.json index c4afaa8f4b8..ed96da377ad 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH agenti, SSH tələblərini birbaşa Bitwarden seyfinizdən imzalamağa imkan verən developerlərə yönəlmiş bir xidmətdir." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium üzvlük lazımdır" }, @@ -427,6 +445,12 @@ "addField": { "message": "Xana əlavə et" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Xana növü" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Fayl cihazda saxlanıldı. Endirilənləri cihazınızdan idarə edin." }, - "importantNotice": { - "message": "Vacib bildiriş" - }, - "setupTwoStepLogin": { - "message": "İki addımlı girişi qur" - }, - "itemDetails": { - "message": "Element detalları" - }, - "itemName": { - "message": "Element adı" - }, - "loginCredentials": { - "message": "Giriş məlumatları" - }, - "additionalOptions": { - "message": "Əlavə seçimlər" - }, - "itemHistory": { - "message": "Element tarixçəsi" - }, - "lastEdited": { - "message": "Son düzəliş" - }, - "upload": { - "message": "Yüklə" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden, 2025-ci ilin Fevral ayından etibarən yeni cihazlardan gələn girişləri doğrulamaq üçün hesabınızın e-poçtuna bir kod göndərəcək." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Hesabınızı qorumaq üçün alternativ bir yol kimi iki addımlı girişi qura və ya e-poçtunuzu müraciət edə biləcəyiniz e-poçtla dəyişdirə bilərsiniz." - }, - "remindMeLater": { - "message": "Daha sonra xatırlat" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "$EMAIL$ e-poçtunuza güvənli şəkildə müraciət edə bilirsiniz?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Xeyr, edə bilmirəm" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Bəli, e-poçtuma güvənli şəkildə müraciət edə bilirəm" - }, - "turnOnTwoStepLogin": { - "message": "İki addımlı girişi işə sal" - }, - "changeAcctEmail": { - "message": "Hesabın e-poçtunu dəyişdir" - }, "allowScreenshots": { "message": "Ekranı çəkməyə icazə ver" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Avto-doldurma ilə vaxta qənaət edin" }, - "newLoginNudgeBody": { - "message": "Bir veb sayt daxil edin ki, bu giriş məlumatları avto-doldurma təklifi kimi görünsün." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Problemsiz onlayn ödəniş" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Gəlişdirici dostu SSH müraciəti" }, - "newSshNudgeBody": { - "message": "Açarlarınızı saxlayın və sürətli, şifrələnmiş kimlik doğrulama üçün SSH agentinə bağlayın." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/be/messages.json b/apps/desktop/src/locales/be/messages.json index 4318f8b2fbb..5b7b4aebf70 100644 --- a/apps/desktop/src/locales/be/messages.json +++ b/apps/desktop/src/locales/be/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Патрабуецца прэміяльны статус" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index 3b8d35ed735..2b456336881 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH-агентът е услуга, предназначена за разработчици, чрез която можете да подписвате заявки за SSH направо от трезора си в Битуорден." }, + "sshAgentPromptBehavior": { + "message": "Изискване на удостоверяване при ползване на SSH-агента" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Изберете как да се обработват заявките за удостоверяване за SSH-агента." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Запомняне на удостоверяванията чрез SSH" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Винаги" + }, + "sshAgentPromptBehaviorNever": { + "message": "Никога" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Запомняне до заключване на трезора" + }, "premiumRequired": { "message": "Изисква се платен абонамент" }, @@ -427,6 +445,12 @@ "addField": { "message": "Добавяне на поле" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Тип на полето" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Файлът е запазен на устройството. Можете да го намерите в мястото за сваляния на устройството." }, - "importantNotice": { - "message": "Важно съобщение" - }, - "setupTwoStepLogin": { - "message": "Настройте двустепенно удостоверяване" - }, - "itemDetails": { - "message": "Подробности за елемента" - }, - "itemName": { - "message": "Име на елемента" - }, - "loginCredentials": { - "message": "Данни за вписване" - }, - "additionalOptions": { - "message": "Допълнителни настройки" - }, - "itemHistory": { - "message": "История на елемента" - }, - "lastEdited": { - "message": "Последна промяна" - }, - "upload": { - "message": "Качване" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Битуорден ще изпрати код до е-пощата Ви, за потвърждаване на вписването от нови устройства. Това ще започне от февруари 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Можете да настроите двустепенно удостоверяване, като различен метод на защита, или ако е необходимо да промените е-пощата си с такава, до която имате достъп." - }, - "remindMeLater": { - "message": "Напомнете ми по-късно" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Имате ли сигурен достъп до е-пощата си – $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Не, нямам" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, имам достъп до е-пощата си" - }, - "turnOnTwoStepLogin": { - "message": "Включване на двустепенното удостоверяване" - }, - "changeAcctEmail": { - "message": "Промяна на е-пощата" - }, "allowScreenshots": { "message": "Позволяване на заснемането на екрана" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Спестете време с автоматично попълване" }, - "newLoginNudgeBody": { - "message": "Добавете уеб сайт, за да може тези данни за вписване да се появяват като предложение за автоматично попълване." + "newLoginNudgeBodyOne": { + "message": "Добавете", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "уеб сайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": ", за да може тези данни за вписване да се появяват като предложение за автоматично попълване.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Безпроблемни плащания" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Улеснен достъп за разработчици чрез SSH" }, - "newSshNudgeBody": { - "message": "Съхранявайте ключове и използвайте връзка чрез SSH агента, за бързо и шифровано удостоверяване." + "newSshNudgeBodyOne": { + "message": "Съхранявайте ключове и използвайте връзка чрез SSH агента, за бързо и шифровано удостоверяване.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Научете повече относно SSH-агента", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/bn/messages.json b/apps/desktop/src/locales/bn/messages.json index 5dd173fcde4..ed7f99f52c9 100644 --- a/apps/desktop/src/locales/bn/messages.json +++ b/apps/desktop/src/locales/bn/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "প্রিমিয়াম আবশ্যক" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/bs/messages.json b/apps/desktop/src/locales/bs/messages.json index cbf4bf421c1..0a5efded68b 100644 --- a/apps/desktop/src/locales/bs/messages.json +++ b/apps/desktop/src/locales/bs/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Potrebno premium članstvo" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ca/messages.json b/apps/desktop/src/locales/ca/messages.json index de71658ec13..d95d8896a68 100644 --- a/apps/desktop/src/locales/ca/messages.json +++ b/apps/desktop/src/locales/ca/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "L'agent SSH és un servei dirigit als desenvolupadors que us permet signar sol·licituds SSH directament des de la caixa forta de Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium requerit" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Noticia important" - }, - "setupTwoStepLogin": { - "message": "Configura inici de sessió en dos passos" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Recorda-m'ho més tard" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, jo no" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Activa l'inici de sessió en dos passos" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Permet capturar la pantalla" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index 0bfaed3e32d..9caafbd0411 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH agent je služba určená vývojářům; umožňuje Vám podepisovat požadavky SSH přímo z Vašeho trezoru." }, + "sshAgentPromptBehavior": { + "message": "Požádat o autorizaci při použití SSH agenta" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Vyberte si, jak vyřizovat žádosti o autorizaci SSH agenta." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Zapamatovat autorizace SSH" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Vždy" + }, + "sshAgentPromptBehaviorNever": { + "message": "Nikdy" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Pamatovat si, dokud není trezor uzamčen" + }, "premiumRequired": { "message": "Je vyžadováno členství Premium" }, @@ -427,6 +445,12 @@ "addField": { "message": "Přidat pole" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Typ pole" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Soubor byl uložen. Můžete jej nalézt ve stažené složce v zařízení." }, - "importantNotice": { - "message": "Důležité upozornění" - }, - "setupTwoStepLogin": { - "message": "Nastavit dvoufázové přihlášení" - }, - "itemDetails": { - "message": "Detaily položky" - }, - "itemName": { - "message": "Název položky" - }, - "loginCredentials": { - "message": "Přihlašovací údaje" - }, - "additionalOptions": { - "message": "Další volby" - }, - "itemHistory": { - "message": "Historie položky" - }, - "lastEdited": { - "message": "Naposledy upraveno" - }, - "upload": { - "message": "Nahrát" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden odešle kód na e-mail Vašeho účtu pro ověření přihlášení z nových zařízení počínaje únorem 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Dvoufázové přihlášení můžete nastavit jako alternativní způsob ochrany Vašeho účtu nebo změnit svůj e-mail na ten, k němuž můžete přistupovat." - }, - "remindMeLater": { - "message": "Připomenout později" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Máte spolehlivý přístup ke svému e-mailu $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ne, nemám" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ano, ke svému e-mailu mám přístup" - }, - "turnOnTwoStepLogin": { - "message": "Zapnout dvoufázové přihlášení" - }, - "changeAcctEmail": { - "message": "Změnit e-mail účtu" - }, "allowScreenshots": { "message": "Povolit záznam obrazovky" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Ušetřete čas s automatickým vyplňováním" }, - "newLoginNudgeBody": { - "message": "Zahrne webovou stránku, takže se toto přihlášení objeví jako návrh automatického vyplňování." + "newLoginNudgeBodyOne": { + "message": "Zahrne", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "webovou stránku, ", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "takže se toto přihlášení objeví jako návrh automatického vyplňování.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Bezproblémová online pokladna" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Přístup SSH pro vývojáře" }, - "newSshNudgeBody": { - "message": "Uložte své klíče a připojte se k SSH agentovi pro rychlé a šifrované ověření." + "newSshNudgeBodyOne": { + "message": "Uložte své klíče a připojte se k SSH agentovi pro rychlé a šifrované ověření.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Další informace o SSH agentovi", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/cy/messages.json b/apps/desktop/src/locales/cy/messages.json index b280a7525cc..b129c97a27a 100644 --- a/apps/desktop/src/locales/cy/messages.json +++ b/apps/desktop/src/locales/cy/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/da/messages.json b/apps/desktop/src/locales/da/messages.json index e30fe7f1643..c7f69e12e10 100644 --- a/apps/desktop/src/locales/da/messages.json +++ b/apps/desktop/src/locales/da/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH-agent er en tjeneste rettet mod udviklere, der muliggør at signere SSH-forespørgsler direkte fra Bitwarden-boksen." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium kræves" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Fil gemt på enheden. Håndtér fra enhedens downloads." }, - "importantNotice": { - "message": "Vigtig notits" - }, - "setupTwoStepLogin": { - "message": "Opsæt totrins-login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Startende i februar 2025, sender Bitwarden en kode til kontoe-mailadressen for at bekræfte logins fra nye enheder." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Man kan opsætte totrins-login som en alternativ måde at beskytte sin konto på eller ændre sin e-mail til en, man kan tilgå." - }, - "remindMeLater": { - "message": "Påmind senere" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Er der pålidelig adgang til e-mailadressen, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nej, muligvis ikke" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, e-mailadressen kan pålideligt tilgås" - }, - "turnOnTwoStepLogin": { - "message": "Slå totrins-login til" - }, - "changeAcctEmail": { - "message": "Skift kontoe-mailadresse" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index fd931f17c4e..002ec437956 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "Der SSH-Agent ist ein Dienst, der sich an Entwickler richtet, mit dem du SSH-Anfragen direkt aus deinem Bitwarden-Tresor aus signieren kannst." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Immer" + }, + "sshAgentPromptBehaviorNever": { + "message": "Nie" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Merken, bis der Tresor gesperrt ist" + }, "premiumRequired": { "message": "Premium notwendig" }, @@ -400,10 +418,10 @@ "message": "Auto-Ausfüllen-Optionen" }, "websiteUri": { - "message": "Webseite (URI)" + "message": "Website (URI)" }, "websiteUriCount": { - "message": "Webseite (URI) $COUNT$", + "message": "Website (URI) $COUNT$", "description": "Label for an input field that contains a website URI. The input field is part of a list of fields, and the count indicates the position of the field in the list.", "placeholders": { "count": { @@ -413,13 +431,13 @@ } }, "websiteAdded": { - "message": "Webseite hinzugefügt" + "message": "Website hinzugefügt" }, "addWebsite": { - "message": "Webseite hinzufügen" + "message": "Website hinzufügen" }, "deleteWebsite": { - "message": "Webseite löschen" + "message": "Website löschen" }, "owner": { "message": "Besitzer" @@ -427,6 +445,12 @@ "addField": { "message": "Feld hinzufügen" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Feldtyp" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Datei auf Gerät gespeichert. Greife darauf über die Downloads deines Geräts zu." }, - "importantNotice": { - "message": "Wichtiger Hinweis" - }, - "setupTwoStepLogin": { - "message": "Zwei-Faktor-Authentifizierung einrichten" - }, - "itemDetails": { - "message": "Eintrag-Details" - }, - "itemName": { - "message": "Eintrags-Name" - }, - "loginCredentials": { - "message": "Zugangsdaten" - }, - "additionalOptions": { - "message": "Weitere Optionen" - }, - "itemHistory": { - "message": "Eintragsverlauf" - }, - "lastEdited": { - "message": "Zuletzt bearbeitet" - }, - "upload": { - "message": "Hochladen" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Ab Februar 2025 wird Bitwarden einen Code an deine Konto-E-Mail-Adresse senden, um Anmeldungen von neuen Geräten zu verifizieren." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Du kannst die Zwei-Faktor-Authentifizierung als eine alternative Methode einrichten, um dein Konto zu schützen, oder deine E-Mail-Adresse zu einer anderen ändern, auf die du zugreifen kannst." - }, - "remindMeLater": { - "message": "Erinnere mich später" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Hast du zuverlässigen Zugriff auf deine E-Mail-Adresse $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nein, habe ich nicht" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, ich kann zuverlässig auf meine E-Mails zugreifen" - }, - "turnOnTwoStepLogin": { - "message": "Zwei-Faktor-Authentifizierung aktivieren" - }, - "changeAcctEmail": { - "message": "E-Mail-Adresse des Kontos ändern" - }, "allowScreenshots": { "message": "Bildschirmaufnahme erlauben" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" }, - "newLoginNudgeBody": { - "message": "Füge eine Website hinzu, damit diese Zugangsdaten als Auto-Ausfüllen-Vorschlag erscheinen." + "newLoginNudgeBodyOne": { + "message": "Füge eine", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "hinzu, damit diese Zugangsdaten als Auto-Ausfüllen-Vorschlag erscheinen.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Nahtlose Online-Kaufabwicklung" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Entwickler-freundlicher SSH-Zugriff" }, - "newSshNudgeBody": { - "message": "Speicher deine Schlüssel und verbinden dich mit dem SSH-Agenten für eine schnelle und verschlüsselte Authentifizierung." + "newSshNudgeBodyOne": { + "message": "Speicher deine Schlüssel und verbinden dich mit dem SSH-Agenten für eine schnelle und verschlüsselte Authentifizierung.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Erfahre mehr über den SSH-Agenten", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/el/messages.json b/apps/desktop/src/locales/el/messages.json index 0ddf85168c2..d721f8bc9b9 100644 --- a/apps/desktop/src/locales/el/messages.json +++ b/apps/desktop/src/locales/el/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "Ο πράκτορα SSH είναι μια υπηρεσία που απευθύνεται σε προγραμματιστές που σας επιτρέπει να υπογράψετε αιτήματα SSH απευθείας από την κρύπτη Bitwarden σας." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Απαιτείται Premium" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Το αρχείο αποθηκεύτηκε στη συσκευή. Διαχείριση από τις λήψεις της συσκευής σας." }, - "importantNotice": { - "message": "Σημαντική ειδοποίηση" - }, - "setupTwoStepLogin": { - "message": "Ρύθμιση σύνδεσης δύο βημάτων" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Το Bitwarden θα στείλει έναν κωδικό στο email του λογαριασμού σας για να επαληθεύσει τις συνδέσεις από νέες συσκευές ξεκινώντας από τον Φεβρουάριο του 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Μπορείτε να ορίσετε σύνδεση δύο βημάτων ως εναλλακτικό τρόπο προστασίας του λογαριασμού σας ή να αλλάξετε το email σας σε ένα που μπορείτε να έχετε πρόσβαση." - }, - "remindMeLater": { - "message": "Υπενθύμιση αργότερα" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Έχετε αξιόπιστη πρόσβαση στο email σας, $EMAIL$;", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Όχι, δεν έχω" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ναι, μπορώ να συνδεθώ αξιόπιστα στο ηλ. ταχυδρομείο email μου" - }, - "turnOnTwoStepLogin": { - "message": "Ενεργοποίηση σύνδεσης δύο βημάτων" - }, - "changeAcctEmail": { - "message": "Αλλαγή email λογαριασμού" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/en_GB/messages.json b/apps/desktop/src/locales/en_GB/messages.json index 6dfb16751d8..117a5baa674 100644 --- a/apps/desktop/src/locales/en_GB/messages.json +++ b/apps/desktop/src/locales/en_GB/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorisation when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorisation requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorisations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/en_IN/messages.json b/apps/desktop/src/locales/en_IN/messages.json index 7f123be2ba6..e07af9017b0 100644 --- a/apps/desktop/src/locales/en_IN/messages.json +++ b/apps/desktop/src/locales/en_IN/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorisation when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorisation requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorisations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/eo/messages.json b/apps/desktop/src/locales/eo/messages.json index 21a7e2c0fb4..cd7e4344cd1 100644 --- a/apps/desktop/src/locales/eo/messages.json +++ b/apps/desktop/src/locales/eo/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/es/messages.json b/apps/desktop/src/locales/es/messages.json index 371f13b2a8d..e012c5e2984 100644 --- a/apps/desktop/src/locales/es/messages.json +++ b/apps/desktop/src/locales/es/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Siempre" + }, + "sshAgentPromptBehaviorNever": { + "message": "Nunca" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium requerido" }, @@ -425,7 +443,13 @@ "message": "Owner" }, "addField": { - "message": "Add field" + "message": "Añadir campo" + }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" }, "fieldType": { "message": "Field type" @@ -434,7 +458,7 @@ "message": "Field label" }, "add": { - "message": "Add" + "message": "Añadir" }, "textHelpText": { "message": "Use text fields for data like security questions" @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Recuérdame más tarde" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "¿Tienes acceso fiable a tu correo electrónico, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, no lo tengo" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sí, puedo acceder a mi correo electrónico de forma fiable" - }, - "turnOnTwoStepLogin": { - "message": "Activar inicio de sesión en dos pasos" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/et/messages.json b/apps/desktop/src/locales/et/messages.json index 8403c342086..bd90fb6a82c 100644 --- a/apps/desktop/src/locales/et/messages.json +++ b/apps/desktop/src/locales/et/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Vajalik on Preemium versioon" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Fail salvestatud. Halda oma seadmesse allalaaditud faile." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/eu/messages.json b/apps/desktop/src/locales/eu/messages.json index 75d175fd722..febf716a283 100644 --- a/apps/desktop/src/locales/eu/messages.json +++ b/apps/desktop/src/locales/eu/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium izatea beharrezkoa da" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/fa/messages.json b/apps/desktop/src/locales/fa/messages.json index 1aa00872a7c..48e1805b62c 100644 --- a/apps/desktop/src/locales/fa/messages.json +++ b/apps/desktop/src/locales/fa/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "در نسخه پرمیوم کار می‌کند" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/fi/messages.json b/apps/desktop/src/locales/fi/messages.json index d3ec77df8bc..8f2e845a51b 100644 --- a/apps/desktop/src/locales/fi/messages.json +++ b/apps/desktop/src/locales/fi/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium vaaditaan" }, @@ -427,6 +445,12 @@ "addField": { "message": "Lisää kenttä" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Kentän tyyppi" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Tiedosto tallennettiin laitteelle. Hallitse sitä laitteesi latauksista." }, - "importantNotice": { - "message": "Tärkeä ilmoitus" - }, - "setupTwoStepLogin": { - "message": "Määritä kaksivaiheinen kirjautuminen" - }, - "itemDetails": { - "message": "Kohteen tiedot" - }, - "itemName": { - "message": "Kohteen nimi" - }, - "loginCredentials": { - "message": "Kirjautumistiedot" - }, - "additionalOptions": { - "message": "Lisävalinnat" - }, - "itemHistory": { - "message": "Kohteen historia" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Lähetä" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden lähettää tilisi sähköpostiosoitteeseen koodin, jolla voit vahvistaa kirjautumiset uusista laitteista helmikuusta 2025 alkaen." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Voit määrittää kaksivaiheisen kirjautumisen tilisi vaihtoehtoiseksi suojaustavaksi tai vaihtaa sähköpostiosoitteesi sellaiseen, johon sinulla on pääsy." - }, - "remindMeLater": { - "message": "Muistuta myöhemmin" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Onko sinulla luotettava pääsy sähköpostiisi, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ei ole" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Kyllä, voin käyttää sähköpostiani luotettavasti" - }, - "turnOnTwoStepLogin": { - "message": "Ota kaksivaiheinen kirjautuminen käyttöön" - }, - "changeAcctEmail": { - "message": "Muuta tilin sähköpostiosoitetta" - }, "allowScreenshots": { "message": "Salli kuvankaappaus" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/fil/messages.json b/apps/desktop/src/locales/fil/messages.json index e2ba2bee10d..2fdd2d48ed6 100644 --- a/apps/desktop/src/locales/fil/messages.json +++ b/apps/desktop/src/locales/fil/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Kailangan ng premium" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/fr/messages.json b/apps/desktop/src/locales/fr/messages.json index 958f8d2bd5a..50c489d479e 100644 --- a/apps/desktop/src/locales/fr/messages.json +++ b/apps/desktop/src/locales/fr/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "L'agent SSH est un service - destiné aux développeurs - qui vous permet de signer des demandes SSH directement depuis votre coffre Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium requis" }, @@ -427,6 +445,12 @@ "addField": { "message": "Ajouter un champ" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Type de champ" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Fichier enregistré sur l'appareil. Gérez à partir des téléchargements de votre appareil." }, - "importantNotice": { - "message": "Avis important" - }, - "setupTwoStepLogin": { - "message": "Configurer l'identification à deux facteurs" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden enverra un code au courriel de votre compte pour vérifier les connexions depuis de nouveaux appareils à partir de février 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Vous pouvez configurer l'identification à deux facteurs comme un moyen alternatif de protéger votre compte ou de changer votre adresse courriel à une autre à laquelle vous pouvez accéder." - }, - "remindMeLater": { - "message": "Me le rappeler plus tard" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Avez-vous un accès fiable à votre courriel $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Non, je ne l'ai pas" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Oui, je peux accéder à mon courriel de manière fiable" - }, - "turnOnTwoStepLogin": { - "message": "Activer l'identification à deux facteurs" - }, - "changeAcctEmail": { - "message": "Changer le courriel du compte" - }, "allowScreenshots": { "message": "Autoriser les captures d'écran" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/gl/messages.json b/apps/desktop/src/locales/gl/messages.json index d9257638423..a74f71752af 100644 --- a/apps/desktop/src/locales/gl/messages.json +++ b/apps/desktop/src/locales/gl/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/he/messages.json b/apps/desktop/src/locales/he/messages.json index 26a33993dc6..2e3b60dfc29 100644 --- a/apps/desktop/src/locales/he/messages.json +++ b/apps/desktop/src/locales/he/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "סוכן ה־SSH הוא שירות המיועד למפתחים שמאפשר לך לחתום בקשות SSH היישר מכספת ה־Bitwarden שלך." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "נדרש חשבון פרימיום" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "הקובץ נשמר למכשיר. נהל מהורדות המכשיר שלך." }, - "importantNotice": { - "message": "הודעה חשובה" - }, - "setupTwoStepLogin": { - "message": "הגדר כניסה דו־שלבית" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden ישלח קוד לדוא\"ל החשבון שלך כדי לאמת כניסות ממכשירים חדשים החל מפברואר 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "אתה יכול להגדיר כניסה דו־שלבית כדרך חלופית להגן על החשבון שלך או לשנות את הדוא\"ל שלך לאחד שאתה יכול לגשת אליו." - }, - "remindMeLater": { - "message": "הזכר לי מאוחר יותר" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "יש לך גישה מהימנה לדוא\"ל שלך, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "לא, אין לי" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "כן, אני יכול לגשת לדוא\"ל שלי באופן מהימן" - }, - "turnOnTwoStepLogin": { - "message": "הפעל כניסה דו־שלבית" - }, - "changeAcctEmail": { - "message": "שנה את דוא\"ל החשבון" - }, "allowScreenshots": { "message": "אפשר לכידת מסך" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/hi/messages.json b/apps/desktop/src/locales/hi/messages.json index dfd4b453338..437b4845bdc 100644 --- a/apps/desktop/src/locales/hi/messages.json +++ b/apps/desktop/src/locales/hi/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/hr/messages.json b/apps/desktop/src/locales/hr/messages.json index 5e8aee8af02..2b800ad99a2 100644 --- a/apps/desktop/src/locales/hr/messages.json +++ b/apps/desktop/src/locales/hr/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH agent je servis namijenjen developerima koji omogućuje potpisivanje SSH zahtjeva izravno iz tvojeg Bitwarden trezora." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Potrebno Premium članstvo" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Datoteka spremljena na uređaj. Upravljaj u preuzimanjima svog uređaja." }, - "importantNotice": { - "message": "Važna napomena" - }, - "setupTwoStepLogin": { - "message": "Postavi dvostruku autentifikaciju" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden će, počevši od veljače 2025., za provjeru prijava s novih uređaja poslati kôd na e-poštu tvog računa." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Prijavu dvostrukom autentifikacijom možeš postaviti kao alternativni način zaštite svog računa ili promijeni svoju e-poštu u onu kojoj možeš pristupiti." - }, - "remindMeLater": { - "message": "Podsjeti me kasnije" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Imaš li pouzdan pristup svojoj e-pošti: $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ne, nemam" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Da, pouzdano mogu pristupiti svojoj e-pošti" - }, - "turnOnTwoStepLogin": { - "message": "Uključi prijavu dvostrukom autentifikacijom" - }, - "changeAcctEmail": { - "message": "Promjeni e-poštu računa" - }, "allowScreenshots": { "message": "Dozvoli snimanje zaslona" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index 640accd3447..e9271cb79b9 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "Az SSH ügynök egy fejlesztőknek szánt szolgáltatás, amely lehetővé teszi az SSH kérések közvetlenül a Bitwarden széfből történő aláírását." }, + "sshAgentPromptBehavior": { + "message": "Hitelesíés kérés az SSH ügynök használatakor" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Válasszuk ki, hogyan kezelje az SSH ügynök a hitelesítési kérelmeket." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Emlékezés az SSH hitelesítésekre" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Mindig" + }, + "sshAgentPromptBehaviorNever": { + "message": "Soha" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Emlékezés a széf lezárásáig" + }, "premiumRequired": { "message": "Prémium szükséges" }, @@ -427,6 +445,12 @@ "addField": { "message": "Mező hozzáadása" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Mezőtípus" }, @@ -3168,19 +3192,19 @@ "message": "Az eszköz megbízható." }, "trustOrganization": { - "message": "Trust organization" + "message": "Megbízok a cégben" }, "trust": { - "message": "Trust" + "message": "Bizalom" }, "doNotTrust": { - "message": "Do not trust" + "message": "Nem bízok meg" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Ez a cég nem megbízható" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "A fiókja biztonsága érdekében csak akkor fogadja el, ha vészhelyzeti hozzáférést adott ennek a felhasználónak, és az ujjlenyomatuk megegyezik azzal, ami a fiókjukon látható" }, "orgTrustWarning": { "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "A fájl mentésre került az eszközre. Kezeljük az eszközről a letöltéseket." }, - "importantNotice": { - "message": "Fontos megjegyzés" - }, - "setupTwoStepLogin": { - "message": "Kétlépéses bejelentkezés beüzemelése" - }, - "itemDetails": { - "message": "Elem részletek" - }, - "itemName": { - "message": "Elem neve" - }, - "loginCredentials": { - "message": "Bejelentkezési hitelesítések" - }, - "additionalOptions": { - "message": "Kiegészítő opciók" - }, - "itemHistory": { - "message": "Elem előzmény" - }, - "lastEdited": { - "message": "Utoljára szerkesztve" - }, - "upload": { - "message": "Feltöltés" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "A Bitwarden 2025 februárjától kódot küld a fiókhoz tartozó email-címre, amellyel ellenőrizhetők az új eszközökről történő bejelentkezések." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "A fiók védelmének alternatív módjaként beállíthatunk kétlépcsős bejelentkezést vagy módosíthatjuk az email címet egy elérhetőre." - }, - "remindMeLater": { - "message": "Emlékeztetés később" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Megbízható a hozzáférés $EMAIL$ email címhez?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nem, nem érem el" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Igen, megbízhatóan hozzáférek az emailjeimhez" - }, - "turnOnTwoStepLogin": { - "message": "Kétlépéses bejelentkezés bekapcsolása" - }, - "changeAcctEmail": { - "message": "Fiók email cím megváltoztatása" - }, "allowScreenshots": { "message": "Képernyőrögzítés engedélyezése" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Idő megtakarítás automatikus kitöltéssel" }, - "newLoginNudgeBody": { - "message": "Adjunk meg egy webhelyet, hogy ez a bejelentkezési név automatikusan kitöltendő javaslatként jelenjen meg." + "newLoginNudgeBodyOne": { + "message": "Bevonás:", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Webhely", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "így ez a bejelentkezés automatikus kitöltési javaslatként jelenik meg.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Zökkenőmentes online fizetés" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Fejlesztőbarát SSH hozzáférés" }, - "newSshNudgeBody": { - "message": "Tároljuk a kulcsokat és csatlakozzunk az SSH-ügynökhöz a gyors, titkosított hitelesítéshez." + "newSshNudgeBodyOne": { + "message": "Tároljuk el a kulcsokat és csatlakozzunk az SSH ügynökhöz a gyors, titkosított hitelesítéshez.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Tudjon meg többet az SSH ügynökröl", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/id/messages.json b/apps/desktop/src/locales/id/messages.json index 0069c3fcf65..a8c6005261b 100644 --- a/apps/desktop/src/locales/id/messages.json +++ b/apps/desktop/src/locales/id/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Memerlukan Keanggotaan Premium" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/it/messages.json b/apps/desktop/src/locales/it/messages.json index 86611e63d96..efe520767ab 100644 --- a/apps/desktop/src/locales/it/messages.json +++ b/apps/desktop/src/locales/it/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "L'agente SSH è un servizio rivolto agli sviluppatori che consente di firmare le richieste SSH direttamente dalla tua cassaforte Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium necessario" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File salvato sul dispositivo. Gestisci dai download del dispositivo." }, - "importantNotice": { - "message": "Notifica importante" - }, - "setupTwoStepLogin": { - "message": "Imposta accesso in due passaggi" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden invierà un codice all'e-mail del tuo account per verificare gli accessi da nuovi dispositivi a partire da febbraio 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Puoi impostare l'accesso in due passaggi come modo alternativo per proteggere il tuo account, o cambiare la tua e-mail in una alla quale puoi accedere." - }, - "remindMeLater": { - "message": "Ricordamelo più tardi" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Hai accesso affidabile alla tua e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, non ce l'ho" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sì, riesco ad accedere all'email" - }, - "turnOnTwoStepLogin": { - "message": "Attiva accesso in due passaggi" - }, - "changeAcctEmail": { - "message": "Cambia l'e-mail dell'account" - }, "allowScreenshots": { "message": "Permetti cattura dello schermo" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ja/messages.json b/apps/desktop/src/locales/ja/messages.json index 56ca918ed79..be632f79e12 100644 --- a/apps/desktop/src/locales/ja/messages.json +++ b/apps/desktop/src/locales/ja/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH エージェントとは、Bitwarden 保管庫から直接 SSH リクエストに署名できる、開発者を対象としたサービスです。" }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "プレミアム会員専用" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "ファイルをデバイスに保存しました。デバイスのダウンロードで管理できます。" }, - "importantNotice": { - "message": "重要なお知らせ" - }, - "setupTwoStepLogin": { - "message": "2段階認証によるログインを設定する" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden は2025年2月以降、新しいデバイスからのログイン時にアカウントのメールアドレスに確認コードを送信します。" - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "代わりに2段階認証によるログインでアカウントを保護するか、メールアドレスをあなたがアクセスできるものに変更できます。" - }, - "remindMeLater": { - "message": "後で再通知" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "メールアドレス $EMAIL$ は、確実にアクセスできるものですか?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "いいえ、違います" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "はい、メールアドレスには私が確実にアクセスできます" - }, - "turnOnTwoStepLogin": { - "message": "2段階認証によるログインを有効にする" - }, - "changeAcctEmail": { - "message": "アカウントのメールアドレスを変更する" - }, "allowScreenshots": { "message": "スクリーンショットを許可" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ka/messages.json b/apps/desktop/src/locales/ka/messages.json index 5c7df5ca22b..22c12c8b501 100644 --- a/apps/desktop/src/locales/ka/messages.json +++ b/apps/desktop/src/locales/ka/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/km/messages.json b/apps/desktop/src/locales/km/messages.json index d9257638423..a74f71752af 100644 --- a/apps/desktop/src/locales/km/messages.json +++ b/apps/desktop/src/locales/km/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/kn/messages.json b/apps/desktop/src/locales/kn/messages.json index f31657c83b2..ff5310f356d 100644 --- a/apps/desktop/src/locales/kn/messages.json +++ b/apps/desktop/src/locales/kn/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "ಪ್ರೀಮಿಯಂ ಅಗತ್ಯವಿದೆ" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ko/messages.json b/apps/desktop/src/locales/ko/messages.json index 315467c4924..c25ee35579a 100644 --- a/apps/desktop/src/locales/ko/messages.json +++ b/apps/desktop/src/locales/ko/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "프리미엄 멤버십 필요" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/lt/messages.json b/apps/desktop/src/locales/lt/messages.json index 279c1b94f6c..c6fe463d7f3 100644 --- a/apps/desktop/src/locales/lt/messages.json +++ b/apps/desktop/src/locales/lt/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Reikalinga Premium narystė" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index 4ceec9ba1cb..0e9d55995d2 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH aģents ir izstrādātājiem paredzēts pakalpojums, kas ļauj parakstīt SSH pieprasījumus tieši no savas Bitwarden glabātavas." }, + "sshAgentPromptBehavior": { + "message": "Vaicāt autorizēšanu, kad izmanto SSH aģentu" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Izvēlēties, kā apstrādāt SSH-agent autorizēšanās pieprasījumus." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Atcerēties SSH autorizēšanās" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Vienmēr" + }, + "sshAgentPromptBehaviorNever": { + "message": "Nekad" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Atcerēties līdz glabātavas aizslēgšanai" + }, "premiumRequired": { "message": "Nepieciešams Premium" }, @@ -427,6 +445,12 @@ "addField": { "message": "Pievienot lauku" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Lauka veids" }, @@ -3177,7 +3201,7 @@ "message": "Neuzticēties" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Apvienība nav uzticama" }, "emergencyAccessTrustWarning": { "message": "Lai nodrošinātu sava konta drošību, jāapstiprina tikai tad, ja šim lietotājam ir nodrošināta ārkārtas piekļuve un tā pirkstu nospiedums atbilsta tam, kas ir attēlots tā kontā" @@ -3186,7 +3210,7 @@ "message": "Lai nodrošinātu sava konta drošību, jāturpina tikai tad, ja esi šīs apvienības dalībnieks, ir iespējota konta atkope un zemāk attēlotais pirkstu nospiedums atbilst apvienības pirkstu nospiedumam." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Šai apvienībai ir uzņēmējdarbības pamatnostādne, kas Tevi iekļaus konta atkopē. Iekļaušana ļaus apvienības pārvaldītājiem nomainīt Tavu paroli. Turpini tikai tad, ja zini šo apvienību un zemāk attēlotā pirkstu nospieduma vārdkopa atbilst apvienības pirkstu nospiedumam!" }, "trustUser": { "message": "Uzticēties lietotājam" @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Datne saglabāta ierīcē. Tā ir atrodama ierīces lejupielāžu mapē." }, - "importantNotice": { - "message": "Svarīgs paziņojums" - }, - "setupTwoStepLogin": { - "message": "Iestatīt divpakāpju pieteikšanos" - }, - "itemDetails": { - "message": "Vienuma dati" - }, - "itemName": { - "message": "Vienuma nosaukums" - }, - "loginCredentials": { - "message": "Pieteikšanās dati" - }, - "additionalOptions": { - "message": "Papildu iespējas" - }, - "itemHistory": { - "message": "Vienuma vēsture" - }, - "lastEdited": { - "message": "Pēdējoreiz labots" - }, - "upload": { - "message": "Augšupielādēt" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden, sākot ar 2025. gada februāri, nosūtīs kodu uz konta e-pasta adresi, lai apliecinātu pieteikšanos jaunās ierīcēs." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Var iestatīt divpakāpju pieteikšanos kā citu veidu, kā aizsargāt savu kontu, vai iestatīt savu e-pasta adresi uz tādu, kurai ir piekļuve." - }, - "remindMeLater": { - "message": "Atgādināt man vēlāk" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Vai ir uzticama piekļuve savai e-pasta adresei $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nē, nav" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Jā, varu uzticami piekļūt savam e-pastam" - }, - "turnOnTwoStepLogin": { - "message": "Ieslēgt divpakāpju pieteikšanos" - }, - "changeAcctEmail": { - "message": "Mainīt konta e-pasta adresi" - }, "allowScreenshots": { "message": "Atļaut ekrāna tveršanu" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Laika ietaupīšana ar automātisko aizpildi" }, - "newLoginNudgeBody": { - "message": "Iekļauj tīmekļvietni, lai šis pieteikšanās vienums parādītos kā automātiskās aizpildes ieteikums!" + "newLoginNudgeBodyOne": { + "message": "Iekļauj", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "tīmekļvietni,", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "lai šis pieteikšanās vienums parādītos kā automātiskās aizpildes ieteikums!", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Plūdena apmaksa tiešsaistē" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Izstrādātājiem draudzīga SSH piekļuve" }, - "newSshNudgeBody": { - "message": "Glabā savas atslēgas un savienojies ar SSH aģentu ātrai, šifrētai autentificēšanai!" + "newSshNudgeBodyOne": { + "message": "Glabā savas atslēgas un savienojies ar SSH aģentu ātrai, šifrētai autentificēšanai!", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Uzzināt vairāk par SSH aģentu", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/me/messages.json b/apps/desktop/src/locales/me/messages.json index 1de148580b5..35345d8985e 100644 --- a/apps/desktop/src/locales/me/messages.json +++ b/apps/desktop/src/locales/me/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium obavezan" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ml/messages.json b/apps/desktop/src/locales/ml/messages.json index e1eb3983d30..69a6bd66d2e 100644 --- a/apps/desktop/src/locales/ml/messages.json +++ b/apps/desktop/src/locales/ml/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "പ്രീമിയം അംഗത്വം ആവശ്യമാണ്" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/mr/messages.json b/apps/desktop/src/locales/mr/messages.json index d9257638423..a74f71752af 100644 --- a/apps/desktop/src/locales/mr/messages.json +++ b/apps/desktop/src/locales/mr/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/my/messages.json b/apps/desktop/src/locales/my/messages.json index 4bae8c20bac..37bef7dbf66 100644 --- a/apps/desktop/src/locales/my/messages.json +++ b/apps/desktop/src/locales/my/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/nb/messages.json b/apps/desktop/src/locales/nb/messages.json index 7db99c878ce..d5bd0fc976e 100644 --- a/apps/desktop/src/locales/nb/messages.json +++ b/apps/desktop/src/locales/nb/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium er påkrevd" }, @@ -427,6 +445,12 @@ "addField": { "message": "Legg til felt" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Felttype" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Viktig melding" - }, - "setupTwoStepLogin": { - "message": "Sett opp 2-trinnspålogging" - }, - "itemDetails": { - "message": "Gjenstandens detaljer" - }, - "itemName": { - "message": "Gjenstandens navn" - }, - "loginCredentials": { - "message": "Legitimasjoner for innlogging" - }, - "additionalOptions": { - "message": "Ekstra innstillinger" - }, - "itemHistory": { - "message": "Gjenstandshistorikk" - }, - "lastEdited": { - "message": "Nyligst redigert" - }, - "upload": { - "message": "Last opp" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Minn meg på det senere" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nei, det gjør jeg ikke" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, jeg har pålitelig tilgang til e-posten min" - }, - "turnOnTwoStepLogin": { - "message": "Slå på 2-trinnsinnlogging" - }, - "changeAcctEmail": { - "message": "Endre kontoens E-postadresse" - }, "allowScreenshots": { "message": "Tillat skjermklipp/-opptak" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Spar tid med auto-utfylling" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Utviklervennlig SSH-tilgang" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ne/messages.json b/apps/desktop/src/locales/ne/messages.json index 0a77ae884d5..dc710b5fbda 100644 --- a/apps/desktop/src/locales/ne/messages.json +++ b/apps/desktop/src/locales/ne/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "प्रिमियम आवश्यक छ" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/nl/messages.json b/apps/desktop/src/locales/nl/messages.json index 6e456550605..d7bb803ed62 100644 --- a/apps/desktop/src/locales/nl/messages.json +++ b/apps/desktop/src/locales/nl/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "De SSH-agent is een dienst gericht op ontwikkelaars waarmee je SSH-verzoeken rechtstreeks vanuit je Bitwarden-kluis kunt ondertekenen." }, + "sshAgentPromptBehavior": { + "message": "Toestemming vragen bij het gebruik van SSH-agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Kies hoe om te gaan met SSH-agent autorisatieverzoeken." + }, + "sshAgentPromptBehaviorHelp": { + "message": "SSH-autorisaties onthouden" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Altijd" + }, + "sshAgentPromptBehaviorNever": { + "message": "Nooit" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Onthoud tot de kluis is vergrendeld" + }, "premiumRequired": { "message": "Premium vereist" }, @@ -427,6 +445,12 @@ "addField": { "message": "Veld toevoegen" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Veldtype" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Bestand op apparaat opgeslagen. Beheer vanaf de downloads op je apparaat." }, - "importantNotice": { - "message": "Belangrijke melding" - }, - "setupTwoStepLogin": { - "message": "Tweestapsaanmelding instellen" - }, - "itemDetails": { - "message": "Itemdetails" - }, - "itemName": { - "message": "Itemnaam" - }, - "loginCredentials": { - "message": "Login referenties" - }, - "additionalOptions": { - "message": "Extra opties" - }, - "itemHistory": { - "message": "Itemgeschiedenis" - }, - "lastEdited": { - "message": "Laatst gewijzigd" - }, - "upload": { - "message": "Uploaden" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Vanaf februari 2025 stuurt Bitwarden een code naar het e-mailadres van je account om inloggen op nieuwe apparaten te verifiëren." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Je kunt tweestapsaanmelding instellen als een alternatieve manier om je account te beschermen of je e-mailadres te veranderen naar een waar je toegang toe hebt." - }, - "remindMeLater": { - "message": "Herinner me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Heb je betrouwbare toegang tot je e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nee, dat heb ik niet" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Ja, ik heb betrouwbare toegang tot mijn e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Tweestapsaanmelding inschakelen" - }, - "changeAcctEmail": { - "message": "E-mailadres van het account veranderen" - }, "allowScreenshots": { "message": "Schermopname toestaan" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Tijd besparen met automatisch aanvullen" }, - "newLoginNudgeBody": { - "message": "Voeg een website toe zodat deze login wordt weergegeven als een automatische invulsuggestie." + "newLoginNudgeBodyOne": { + "message": "Voeg een", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "toe zodat deze login wordt weergegeven als een automatische invulsuggestie.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Naadloos online afrekenen" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Ontwikkelaars-vriendelijke SSH-toegang" }, - "newSshNudgeBody": { - "message": "Sla je sleutels op en verbind met de SSH-agent voor snelle, versleutelde authenticatie." + "newSshNudgeBodyOne": { + "message": "Sla je sleutels op en verbind met de SSH-agent voor snelle, versleutelde authenticatie.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Meer informatie over SSH-agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/nn/messages.json b/apps/desktop/src/locales/nn/messages.json index 0ad9bc29c4a..0a639b209c5 100644 --- a/apps/desktop/src/locales/nn/messages.json +++ b/apps/desktop/src/locales/nn/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium er påkravt" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/or/messages.json b/apps/desktop/src/locales/or/messages.json index bb7e2c4e4d3..83e1f39d635 100644 --- a/apps/desktop/src/locales/or/messages.json +++ b/apps/desktop/src/locales/or/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/pl/messages.json b/apps/desktop/src/locales/pl/messages.json index bf0ed5216d3..c4978d6c74d 100644 --- a/apps/desktop/src/locales/pl/messages.json +++ b/apps/desktop/src/locales/pl/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "Agent SSH to usługa skierowana do programistów, która umożliwia podpisywanie żądań SSH bezpośrednio z Twojego sejfu Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Konto Premium jest wymagane" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Plik zapisany na urządzeniu. Zarządzaj plikiem na swoim urządzeniu." }, - "importantNotice": { - "message": "Ważna informacja" - }, - "setupTwoStepLogin": { - "message": "Skonfiguruj dwustopniowe logowanie" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden wyśle kod na Twój adres e-mail w celu zweryfikowania logowania z nowych urządzeń, począwszy od lutego 2025 r." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Możesz skonfigurować dwustopniowe logowanie jako alternatywny sposób ochrony konta lub zmienić swój adres e-mail, do którego masz dostęp." - }, - "remindMeLater": { - "message": "Przypomnij mi później" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Czy masz pewny dostęp do swojego adresu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nie, nie mam" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Tak, mam pewny dostęp do mojego adresu e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Włącz dwustopniowe logowanie" - }, - "changeAcctEmail": { - "message": "Zmień adres e-mail konta" - }, "allowScreenshots": { "message": "Zezwól na przechwytywanie ekranu" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/pt_BR/messages.json b/apps/desktop/src/locales/pt_BR/messages.json index afdc882ad87..591357b109d 100644 --- a/apps/desktop/src/locales/pt_BR/messages.json +++ b/apps/desktop/src/locales/pt_BR/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "O agente SSH é um serviço direcionado a desenvolvedores que permite que você assine solicitações SSH diretamente do seu cofre do Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Requer Assinatura Premium" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Arquivo salvo no dispositivo. Gerencie a partir das transferências do seu dispositivo." }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Configurar login em duas etapas" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden enviará um código para o seu e-mail para verificar novos dispositivos a partir de fevereiro de 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Você pode configurar o login em duas etapas como uma forma alternativa de proteger sua conta ou mudar seu e-mail para um que você possa acessar." - }, - "remindMeLater": { - "message": "Lembre-me depois" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Você tem acesso ao seu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Não tenho" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sim, eu tenho" - }, - "turnOnTwoStepLogin": { - "message": "Ativar login em duas etapas" - }, - "changeAcctEmail": { - "message": "Alterar e-mail" - }, "allowScreenshots": { "message": "Permitir captura de tela" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/pt_PT/messages.json b/apps/desktop/src/locales/pt_PT/messages.json index f513ac516d7..a64b06faa68 100644 --- a/apps/desktop/src/locales/pt_PT/messages.json +++ b/apps/desktop/src/locales/pt_PT/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "O agente SSH é um serviço direcionado a programadores que lhe permite assinar pedidos SSH diretamente do seu cofre Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Pedir autorização ao utilizar o agente SSH" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Escolha como tratar os pedidos de autorização do agente SSH." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Recordar as autorizações SSH" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Sempre" + }, + "sshAgentPromptBehaviorNever": { + "message": "Nunca" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Recordar até que o cofre seja bloqueado" + }, "premiumRequired": { "message": "É necessária uma subscrição Premium" }, @@ -427,6 +445,12 @@ "addField": { "message": "Adicionar campo" }, + "editField": { + "message": "Editar campo" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Tem a certeza de que pretende eliminar permanentemente este anexo?" + }, "fieldType": { "message": "Tipo de campo" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Ficheiro guardado no dispositivo. Faça a gestão a partir das transferências do seu dispositivo." }, - "importantNotice": { - "message": "Aviso importante" - }, - "setupTwoStepLogin": { - "message": "Definir a verificação de dois passos" - }, - "itemDetails": { - "message": "Detalhes do item" - }, - "itemName": { - "message": "Nome do item" - }, - "loginCredentials": { - "message": "Credenciais de início de sessão" - }, - "additionalOptions": { - "message": "Opções adicionais" - }, - "itemHistory": { - "message": "Histórico do item" - }, - "lastEdited": { - "message": "Última edição" - }, - "upload": { - "message": "Carregar" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "O Bitwarden enviará um código para o e-mail da sua conta para verificar as credenciais de novos dispositivos a partir de fevereiro de 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Pode configurar a verificação de dois passos como forma alternativa de proteger a sua conta ou alterar o seu e-mail para um a que possa aceder." - }, - "remindMeLater": { - "message": "Lembrar-me mais tarde" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Tem um acesso fiável ao seu e-mail, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Não, não tenho" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Sim, consigo aceder de forma fiável ao meu e-mail" - }, - "turnOnTwoStepLogin": { - "message": "Ativar a verificação de dois passos" - }, - "changeAcctEmail": { - "message": "Alterar o e-mail da conta" - }, "allowScreenshots": { "message": "Permitir a captura de ecrã" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Poupe tempo com o preenchimento automático" }, - "newLoginNudgeBody": { - "message": "Inclua um site para que esta credencial apareça como uma sugestão de preenchimento automático." + "newLoginNudgeBodyOne": { + "message": "Inclua um", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "site", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "para que esta credencial apareça como uma sugestão de preenchimento automático.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Pagamentos online sem problemas" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Acesso SSH de fácil utilização pelos programadores" }, - "newSshNudgeBody": { - "message": "Guarde as suas chaves e ligue-se ao agente SSH para uma autenticação rápida e encriptada." + "newSshNudgeBodyOne": { + "message": "Guarde as suas chaves e ligue-se ao agente SSH para uma autenticação rápida e encriptada.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Saiba mais sobre o agente SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ro/messages.json b/apps/desktop/src/locales/ro/messages.json index 5957b51f820..f74dbeeb705 100644 --- a/apps/desktop/src/locales/ro/messages.json +++ b/apps/desktop/src/locales/ro/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium necesar" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/ru/messages.json b/apps/desktop/src/locales/ru/messages.json index ec01fc78342..428d4103039 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "Агент SSH - это сервис, ориентированный на разработчиков, позволяющий подписывать запросы SSH непосредственно из вашего хранилища Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Запрашивать авторизацию при использовании агента SSH" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Выберите способ обработки запросов авторизации агентом SSH." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Запоминать авторизации SSH" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Всегда" + }, + "sshAgentPromptBehaviorNever": { + "message": "Никогда" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Помнить до блокировки хранилища" + }, "premiumRequired": { "message": "Требуется Премиум" }, @@ -427,6 +445,12 @@ "addField": { "message": "Добавить поле" }, + "editField": { + "message": "Изменить поле" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Вы уверены, что хотите навсегда удалить это вложение?" + }, "fieldType": { "message": "Тип поля" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Файл сохранен на устройстве. Управляйте им из загрузок устройства." }, - "importantNotice": { - "message": "Важное уведомление" - }, - "setupTwoStepLogin": { - "message": "Настроить двухэтапную аутентификацию" - }, - "itemDetails": { - "message": "Информация об элементе" - }, - "itemName": { - "message": "Название элемента" - }, - "loginCredentials": { - "message": "Данные для авторизации" - }, - "additionalOptions": { - "message": "Дополнительные настройки" - }, - "itemHistory": { - "message": "История элемента" - }, - "lastEdited": { - "message": "Последнее изменение" - }, - "upload": { - "message": "Загрузить" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Начиная с февраля 2025 года Bitwarden будет отправлять код на электронную почту вашего аккаунта для подтверждения авторизации с новых устройств." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "В качестве альтернативного способа защиты учетной записи вы можете настроить двухэтапную аутентификацию или сменить электронную почту на ту, к которой вы можете получить доступ." - }, - "remindMeLater": { - "message": "Напомнить позже" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Есть ли у вас надежный доступ к электронной почте $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Нет, не знаю" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, я имею надежный доступ к своей электронной почте" - }, - "turnOnTwoStepLogin": { - "message": "Включить двухэтапную аутентификацию" - }, - "changeAcctEmail": { - "message": "Изменить email аккаунта" - }, "allowScreenshots": { "message": "Разрешить захват экрана" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Экономьте время с помощью автозаполнения" }, - "newLoginNudgeBody": { - "message": "Включите сайт, чтобы этот логин отображался в качестве предложения для автозаполнения." + "newLoginNudgeBodyOne": { + "message": "Включите", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "сайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "чтобы этот логин отображался в качестве предложения для автозаполнения.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Оформление заказа через интернет" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Удобный для разработчиков SSH-доступ" }, - "newSshNudgeBody": { - "message": "Храните свои ключи и подключайтесь с помощью агента SSH для быстрой и зашифрованной аутентификации." + "newSshNudgeBodyOne": { + "message": "Храните свои ключи и подключайтесь с помощью агента SSH для быстрой и зашифрованной аутентификации.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Узнайте больше об агенте SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/si/messages.json b/apps/desktop/src/locales/si/messages.json index cc069c51963..e90c27094f8 100644 --- a/apps/desktop/src/locales/si/messages.json +++ b/apps/desktop/src/locales/si/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index d60b67a27c8..30177612d10 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "Agent SSH je služba určená pre vývojárov, ktorá vám umožňuje podpisovať požiadavky SSH priamo z vášho trezora Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Pri používaní agenta SSH žiadať o autorizáciu" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Vyberte, ako spracovať požiadavky na autorizáciu agenta SSH." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Zapamätať si autorizácie SSH" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Vždy" + }, + "sshAgentPromptBehaviorNever": { + "message": "Nikdy" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Pamätať si počas odomknutého trezora" + }, "premiumRequired": { "message": "Vyžaduje prémiový účet" }, @@ -427,6 +445,12 @@ "addField": { "message": "Pridať pole" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Typ poľa" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Súbor sa uložil do zariadenia. Spravujte stiahnuté súbory zo zariadenia." }, - "importantNotice": { - "message": "Dôležité upozornenie" - }, - "setupTwoStepLogin": { - "message": "Nastaviť dvojstupňové prihlásenie" - }, - "itemDetails": { - "message": "Podrobnosti o položke" - }, - "itemName": { - "message": "Názov položky" - }, - "loginCredentials": { - "message": "Prihlasovacie údaje" - }, - "additionalOptions": { - "message": "Ďalšie možnosti" - }, - "itemHistory": { - "message": "História položky" - }, - "lastEdited": { - "message": "Posledná úprava" - }, - "upload": { - "message": "Nahrať" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden vám od februára 2025 pošle na e-mail vášho účtu kód na overenie prihlásenia z nových zariadení." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Ako alternatívny spôsob ochrany svojho účtu môžete nastaviť dvojstupňové prihlásenie alebo zmeniť e-mail na taký, ku ktorému máte prístup." - }, - "remindMeLater": { - "message": "Pripomenúť neskôr" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Máte zaručený prístup k e-mailu $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Nie, nemám" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Áno, mám zaručený prístup k e-mailu" - }, - "turnOnTwoStepLogin": { - "message": "Zapnúť dvojstupňové prihlásenie" - }, - "changeAcctEmail": { - "message": "Zmeniť e-mail účtu" - }, "allowScreenshots": { "message": "Povoliť snímanie obrazovky" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Ušetrite čas s automatickým vypĺňaním" }, - "newLoginNudgeBody": { - "message": "Zadajte webovú stránku, aby sa tieto prihlasovacie údaje zobrazili ako návrh na automatické vyplnenie." + "newLoginNudgeBodyOne": { + "message": "Zahrnúť", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "webstránku", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "aby sa tieto prihlasovacie údaje zobrazili ako návrh na automatické vyplnenie.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Bezproblémová online registrácia" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Prístup SSH vhodný pre vývojárov" }, - "newSshNudgeBody": { - "message": "Uložte si kľúče a pripojte sa pomocou agenta SSH na rýchle šifrované overovanie." + "newSshNudgeBodyOne": { + "message": "Uložte si kľúče a pripojte sa pomocou agenta SSH na rýchle šifrované overovanie.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Viac informácií o agentovi SSH", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/sl/messages.json b/apps/desktop/src/locales/sl/messages.json index 631cc504cef..e81fa844b9b 100644 --- a/apps/desktop/src/locales/sl/messages.json +++ b/apps/desktop/src/locales/sl/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Potrebno je premium članstvo" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/sr/messages.json b/apps/desktop/src/locales/sr/messages.json index 155160de375..1684d188905 100644 --- a/apps/desktop/src/locales/sr/messages.json +++ b/apps/desktop/src/locales/sr/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH агент је услуга намењена програмерима која вам омогућава да потпишете SSH захтеве директно из вашег Bitwarden сефа." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Потребан Премијум" }, @@ -427,6 +445,12 @@ "addField": { "message": "Додај поље" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Врста поља" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Датотека је сачувана на уређају. Управљајте преузимањима са свог уређаја." }, - "importantNotice": { - "message": "Важно обавештење" - }, - "setupTwoStepLogin": { - "message": "Поставити дво-степенску пријаву" - }, - "itemDetails": { - "message": "Детаљи ставке" - }, - "itemName": { - "message": "Име ставке" - }, - "loginCredentials": { - "message": "Акредитиве за пријављивање" - }, - "additionalOptions": { - "message": "Додатне опције" - }, - "itemHistory": { - "message": "Историја предмета" - }, - "lastEdited": { - "message": "Последња измена" - }, - "upload": { - "message": "Отпреми" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden ће послати кôд на имејл вашег налога за верификовање пријављивања са нових уређаја почевши од фебруара 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Можете да подесите пријаву у два корака као алтернативни начин да заштитите свој налог или да промените свој имејл у један који можете да приступите." - }, - "remindMeLater": { - "message": "Подсети ме касније" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Да ли имате поуздан приступ својим имејлом, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Не, ненам" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Да, могу поуздано да приступим овим имејлом" - }, - "turnOnTwoStepLogin": { - "message": "Упалити дво-степенску пријаву" - }, - "changeAcctEmail": { - "message": "Променити имејл налога" - }, "allowScreenshots": { "message": "Дозволи снимање екрана" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Уштедите време са ауто-пуњењем" }, - "newLoginNudgeBody": { - "message": "Укључите веб страницу тако да се ова пријава појављује као предлог за ауто-пуњење." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Лако онлајн плачање" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Лак SSH приступ" }, - "newSshNudgeBody": { - "message": "Чувајте кључеве и повежите се са SSH агент за брзу, шифровану аутентификацију." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/sv/messages.json b/apps/desktop/src/locales/sv/messages.json index a5906d7ba35..a9a1e9b3a03 100644 --- a/apps/desktop/src/locales/sv/messages.json +++ b/apps/desktop/src/locales/sv/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium krävs" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/te/messages.json b/apps/desktop/src/locales/te/messages.json index d9257638423..a74f71752af 100644 --- a/apps/desktop/src/locales/te/messages.json +++ b/apps/desktop/src/locales/te/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/th/messages.json b/apps/desktop/src/locales/th/messages.json index 28fa32e5d1b..62979e4290f 100644 --- a/apps/desktop/src/locales/th/messages.json +++ b/apps/desktop/src/locales/th/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium Required" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/tr/messages.json b/apps/desktop/src/locales/tr/messages.json index 5d0d71f4563..2927ef81f5c 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Her zaman" + }, + "sshAgentPromptBehaviorNever": { + "message": "Hiçbir zaman" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Premium gerekli" }, @@ -427,6 +445,12 @@ "addField": { "message": "Alan ekle" }, + "editField": { + "message": "Alanı düzenle" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Bu dosyayı kalıcı olarak silmek istediğinizden emin misiniz?" + }, "fieldType": { "message": "Alan türü" }, @@ -539,7 +563,7 @@ "message": "Regenerate SSH key" }, "copySshPrivateKey": { - "message": "Copy SSH private key" + "message": "SSH özel anahtarını kopyala" }, "copyPassphrase": { "message": "Parolayı kopyala", @@ -716,7 +740,7 @@ "message": "Kimlik doğrulama uygulamanızdaki kodu girin" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Doğrulamak için Yubikey'inize basın" }, "logInWithPasskey": { "message": "Geçiş anahtarıyla giriş yap" @@ -907,7 +931,7 @@ "message": "Don't ask again on this device for 30 days" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "Başka bir yöntem seç", "description": "Select another two-step login method" }, "useYourRecoveryCode": { @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Dosya cihaza kaydedildi. Cihazınızın indirilenler klasöründen yönetebilirsiniz." }, - "importantNotice": { - "message": "Önemli uyarı" - }, - "setupTwoStepLogin": { - "message": "İki adımlı girişi ayarlayın" - }, - "itemDetails": { - "message": "Kayıt ayrıntıları" - }, - "itemName": { - "message": "Kayıt adı" - }, - "loginCredentials": { - "message": "Hesap bilgileri" - }, - "additionalOptions": { - "message": "Ek seçenekler" - }, - "itemHistory": { - "message": "Kayıt geçmişi" - }, - "lastEdited": { - "message": "Son düzenlenme" - }, - "upload": { - "message": "Yükle" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Şubat 2025 itibarıyla Bitwarden, yeni cihazlardan yeni girişleri doğrulamanız için e-posta adresinize bir kod gönderecektir." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Hesabınızı korumanın alternatif bir yolu olarak iki adımlı girişi etkinleştirebilirsiniz. Aksi halde e-posta adresinizin doğru olduğundan emin olmalısınız." - }, - "remindMeLater": { - "message": "Daha sonra hatırlat" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "$EMAIL$ adresinize sağlıklı bir şekilde erişebiliyor musunuz?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Hayır, erişemiyorum" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Evet, e-postalarıma sağlıklı bir şekilde erişebiliyorum" - }, - "turnOnTwoStepLogin": { - "message": "İki adımlı girişi etkinleştir" - }, - "changeAcctEmail": { - "message": "Hesap e-postasını değiştir" - }, "allowScreenshots": { "message": "Ekran kaydına izin ver" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Otomatik doldurmayla zaman kazanın" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Bu hesabın otomatik doldurma önerisi olarak görünmesi için bir", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "web sitesi", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "ekleyin.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Kesintisiz çevrimiçi alışveriş" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/uk/messages.json b/apps/desktop/src/locales/uk/messages.json index 6ea6787f714..aa75d37f54a 100644 --- a/apps/desktop/src/locales/uk/messages.json +++ b/apps/desktop/src/locales/uk/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "Агент SSH – це служба, призначена для розробників, яка дає можливість підписувати запити SSH безпосередньо зі сховища Bitwarden." }, + "sshAgentPromptBehavior": { + "message": "Запитувати авторизацію у разі використання SSH-агента" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Виберіть, як поводитись із запитами авторизації SSH-агента." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Запам'ятовувати авторизації SSH" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Завжди" + }, + "sshAgentPromptBehaviorNever": { + "message": "Ніколи" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Пам'ятати до блокування сховища" + }, "premiumRequired": { "message": "Необхідна передплата преміум" }, @@ -427,6 +445,12 @@ "addField": { "message": "Додати поле" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Тип поля" }, @@ -2008,13 +2032,13 @@ "description": "Premium membership" }, "freeOrgsCannotUseAttachments": { - "message": "Free organizations cannot use attachments" + "message": "Організації без передплати не можуть використовувати вкладення" }, "singleFieldNeedsAttention": { - "message": "1 field needs your attention." + "message": "1 поле потребує вашої уваги." }, "multipleFieldsNeedAttention": { - "message": "$COUNT$ fields need your attention.", + "message": "$COUNT$ полів потребують вашої уваги.", "placeholders": { "count": { "content": "$1", @@ -3168,28 +3192,28 @@ "message": "Довірений пристрій" }, "trustOrganization": { - "message": "Trust organization" + "message": "Довіряти організації" }, "trust": { - "message": "Trust" + "message": "Довіряти" }, "doNotTrust": { - "message": "Do not trust" + "message": "Не довіряти" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Це не довірена організація" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Щоб захистити свій обліковий запис, підтверджуйте лише якщо ви надали цьому користувачу екстрений доступ, і його цифровий відбиток збігається з показаним в його обліковому записі." }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Щоб захистити свій обліковий запис, продовжуйте лише якщо ви є учасником цієї організації, маєте ввімкнене відновлення облікового запису, і показаний нижче цифровий відбиток збігається з відбитком організації." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Ця організація має політику компанії, яка розгорне для вас відновлення облікового запису. Розгортання дасть змогу адміністраторам організації змінювати ваш пароль. Продовжуйте тільки якщо ви впізнаєте організацію і наведена нижче фраза відбитка відповідає відбитку організації." }, "trustUser": { - "message": "Trust user" + "message": "Довіряти користувачу" }, "inputRequired": { "message": "Необхідно ввести дані." @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "Файл збережено на пристрої. Ви можете його знайти у теці завантажень." }, - "importantNotice": { - "message": "Важлива інформація" - }, - "setupTwoStepLogin": { - "message": "Налаштувати двоетапну перевірку" - }, - "itemDetails": { - "message": "Подробиці запису" - }, - "itemName": { - "message": "Назва запису" - }, - "loginCredentials": { - "message": "Облікові дані для входу" - }, - "additionalOptions": { - "message": "Додаткові налаштування" - }, - "itemHistory": { - "message": "Історія запису" - }, - "lastEdited": { - "message": "Востаннє редаговано" - }, - "upload": { - "message": "Вивантажити" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden надсилатиме код підтвердження на електронну пошту вашого облікового запису під час входу з нових пристроїв, починаючи з лютого 2025 року." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "Ви можете налаштувати двоетапну перевірку як альтернативний спосіб захисту свого облікового запису, або змінити електронну пошту на таку, до якої ви маєте доступ." - }, - "remindMeLater": { - "message": "Нагадати пізніше" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Ви маєте постійний доступ до своєї електронної пошти $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "Ні, не маю" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Так, я маю постійний доступ до своєї електронної пошти" - }, - "turnOnTwoStepLogin": { - "message": "Увімкнути двоетапну перевірку" - }, - "changeAcctEmail": { - "message": "Змінити адресу е-пошти" - }, "allowScreenshots": { "message": "Дозволити захоплення екрана" }, @@ -3753,33 +3720,52 @@ "message": "Перемістити" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Заощаджуйте час з автозаповненням" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Включити", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Вебсайт", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "щоб цей запис з'являвся у пропозиціях автозаповнення.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Швидке оформлення замовлень" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "За допомогою записів для карток можна безпечно й точно заповнювати платіжні форми." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Спростіть створення облікових записів" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "За допомогою записів для посвідчень можна швидко заповнювати форми реєстрації чи контактів." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Захистіть свої конфіденційні дані" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "За допомогою нотаток можна надійно зберігати конфіденційні дані, як-от банківську інформацію або страхування." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "SSH-доступ для розробників" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Зберігайте свої ключі та під'єднуйтеся за допомогою SSH-агента для швидкої зашифрованої автентифікації.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Докладніше про SSH-агента", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/vi/messages.json b/apps/desktop/src/locales/vi/messages.json index bd2b091cbad..826b0033aa2 100644 --- a/apps/desktop/src/locales/vi/messages.json +++ b/apps/desktop/src/locales/vi/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "The SSH agent is a service targeted at developers that allows you to sign SSH requests directly from your Bitwarden vault." }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "Cần có tài khoản cao cấp" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, - "importantNotice": { - "message": "Important notice" - }, - "setupTwoStepLogin": { - "message": "Set up two-step login" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." - }, - "remindMeLater": { - "message": "Remind me later" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" - }, - "turnOnTwoStepLogin": { - "message": "Turn on two-step login" - }, - "changeAcctEmail": { - "message": "Change account email" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index e97144ddfb0..703680440d8 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH 代理是一个针对开发者的服务,允许您直接从 Bitwarden 密码库签署 SSH 请求。" }, + "sshAgentPromptBehavior": { + "message": "使用 SSH 代理时提示授权" + }, + "sshAgentPromptBehaviorDesc": { + "message": "选择如何处理 SSH 代理授权请求。" + }, + "sshAgentPromptBehaviorHelp": { + "message": "记住 SSH 授权" + }, + "sshAgentPromptBehaviorAlways": { + "message": "总是" + }, + "sshAgentPromptBehaviorNever": { + "message": "从不" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "记住直到密码库被锁定" + }, "premiumRequired": { "message": "需要高级版" }, @@ -427,6 +445,12 @@ "addField": { "message": "添加字段" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "字段类型" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "文件已保存到设备。可以在设备下载中进行管理。" }, - "importantNotice": { - "message": "重要通知" - }, - "setupTwoStepLogin": { - "message": "设置两步登录" - }, - "itemDetails": { - "message": "项目详细信息" - }, - "itemName": { - "message": "项目名称" - }, - "loginCredentials": { - "message": "登录凭据" - }, - "additionalOptions": { - "message": "附加选项" - }, - "itemHistory": { - "message": "项目历史记录" - }, - "lastEdited": { - "message": "最后编辑于" - }, - "upload": { - "message": "上传" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "从 2025 年 02 月起,当有来自新设备的登录时,Bitwarden 将向您的账户电子邮箱发送验证码。" - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "您可以设置两步登录作为保护账户的替代方法,或将您的电子邮箱更改为您可以访问的电子邮箱。" - }, - "remindMeLater": { - "message": "稍后提醒我" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "您能可正常访问您的电子邮箱 $EMAIL$ 吗?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "不,我不能" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "是的,我可以正常访问我的电子邮箱" - }, - "turnOnTwoStepLogin": { - "message": "启用两步登录" - }, - "changeAcctEmail": { - "message": "更改账户电子邮箱" - }, "allowScreenshots": { "message": "允许屏幕截图" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "使用自动填充节省时间" }, - "newLoginNudgeBody": { - "message": "请包含网站,以便将此登录显示为自动填充建议。" + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "无缝在线结账" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "开发人员友好的 SSH 访问权限" }, - "newSshNudgeBody": { - "message": "存储您的密钥并与 SSH 代理连接,以进行快速、加密的身份验证。" + "newSshNudgeBodyOne": { + "message": "存储您的密钥并与 SSH 代理连接,以进行快速、加密的身份验证。", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "进一步了解 SSH 代理", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } diff --git a/apps/desktop/src/locales/zh_TW/messages.json b/apps/desktop/src/locales/zh_TW/messages.json index c7e9ec7522c..0f99d4a3151 100644 --- a/apps/desktop/src/locales/zh_TW/messages.json +++ b/apps/desktop/src/locales/zh_TW/messages.json @@ -237,6 +237,24 @@ "enableSshAgentHelp": { "message": "SSH代理是一個針對開發者的服務,它能夠直接從 Bitwarden 密碼庫簽發SSH請求。" }, + "sshAgentPromptBehavior": { + "message": "Ask for authorization when using SSH agent" + }, + "sshAgentPromptBehaviorDesc": { + "message": "Choose how to handle SSH-agent authorization requests." + }, + "sshAgentPromptBehaviorHelp": { + "message": "Remember SSH authorizations" + }, + "sshAgentPromptBehaviorAlways": { + "message": "Always" + }, + "sshAgentPromptBehaviorNever": { + "message": "Never" + }, + "sshAgentPromptBehaviorRememberUntilLock": { + "message": "Remember until vault is locked" + }, "premiumRequired": { "message": "需要進階會員資格" }, @@ -427,6 +445,12 @@ "addField": { "message": "Add field" }, + "editField": { + "message": "Edit field" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "Are you sure you want to permanently delete this attachment?" + }, "fieldType": { "message": "Field type" }, @@ -3671,63 +3695,6 @@ "fileSavedToDevice": { "message": "檔案已儲存到裝置。在您的裝置上管理下載檔案。" }, - "importantNotice": { - "message": "重要通知" - }, - "setupTwoStepLogin": { - "message": "啟動兩階段登入" - }, - "itemDetails": { - "message": "Item details" - }, - "itemName": { - "message": "Item name" - }, - "loginCredentials": { - "message": "Login credentials" - }, - "additionalOptions": { - "message": "Additional options" - }, - "itemHistory": { - "message": "Item history" - }, - "lastEdited": { - "message": "Last edited" - }, - "upload": { - "message": "Upload" - }, - "newDeviceVerificationNoticeContentPage1": { - "message": "從 2025 年 2 月開始,Bitwarden 會傳送代碼到您的帳號電子郵件中來驗證新裝置的登入。" - }, - "newDeviceVerificationNoticeContentPage2": { - "message": "您可以啟動兩階段認證來保護您的帳號或更改您可以存取的電子郵件位址。" - }, - "remindMeLater": { - "message": "稍後再提醒我" - }, - "newDeviceVerificationNoticePageOneFormContent": { - "message": "您可以存取您的電子郵件位址 $EMAIL$ 嗎?", - "placeholders": { - "email": { - "content": "$1", - "example": "your_name@email.com" - } - } - }, - "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "不,我不行" - }, - "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "是,我可以存取我的電子郵件位址" - }, - "turnOnTwoStepLogin": { - "message": "啟動兩階段登入" - }, - "changeAcctEmail": { - "message": "更改帳號電子郵件位址" - }, "allowScreenshots": { "message": "Allow screen capture" }, @@ -3755,8 +3722,20 @@ "newLoginNudgeTitle": { "message": "Save time with autofill" }, - "newLoginNudgeBody": { - "message": "Include a Website so this login appears as an autofill suggestion." + "newLoginNudgeBodyOne": { + "message": "Include a", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "Website", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "so this login appears as an autofill suggestion.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { "message": "Seamless online checkout" @@ -3779,7 +3758,14 @@ "newSshNudgeTitle": { "message": "Developer-friendly SSH access" }, - "newSshNudgeBody": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication." + "newSshNudgeBodyOne": { + "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "Learn more about SSH agent", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } } From 6ccf5834959a096627121d99a6fc67b75a69e40b Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 12:30:03 +0000 Subject: [PATCH 07/36] Autosync the updated translations (#14699) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/desktop/src/locales/bg/messages.json | 4 ++-- apps/desktop/src/locales/cs/messages.json | 4 ++-- apps/desktop/src/locales/de/messages.json | 8 ++++---- apps/desktop/src/locales/hu/messages.json | 4 ++-- apps/desktop/src/locales/lv/messages.json | 4 ++-- apps/desktop/src/locales/sk/messages.json | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index 2b456336881..33cd71c1d5e 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -446,10 +446,10 @@ "message": "Добавяне на поле" }, "editField": { - "message": "Edit field" + "message": "Редактиране на полето" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Наистина ли искате да изтриете завинаги този прикачен файл?" }, "fieldType": { "message": "Тип на полето" diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index 9caafbd0411..58b986167a3 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -446,10 +446,10 @@ "message": "Přidat pole" }, "editField": { - "message": "Edit field" + "message": "Upravit pole" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Opravdu chcete tuto přílohu navždy smazat?" }, "fieldType": { "message": "Typ pole" diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index 002ec437956..7b1ae3521e3 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -113,7 +113,7 @@ "message": "Verifizierungscode (TOTP)" }, "website": { - "message": "Webseite" + "message": "Website" }, "notes": { "message": "Notizen" @@ -446,10 +446,10 @@ "message": "Feld hinzufügen" }, "editField": { - "message": "Edit field" + "message": "Feld bearbeiten" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Bist du sicher, dass du diesen Anhang dauerhaft löschen möchtest?" }, "fieldType": { "message": "Feldtyp" @@ -2774,7 +2774,7 @@ "description": "Displayed with the address on the forwarding service's configuration screen." }, "forwarderGeneratedByWithWebsite": { - "message": "Webseite: $WEBSITE$. Von Bitwarden generiert.", + "message": "Website: $WEBSITE$. Von Bitwarden generiert.", "description": "Displayed with the address on the forwarding service's configuration screen.", "placeholders": { "WEBSITE": { diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index e9271cb79b9..0b6f60e9fb2 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -446,10 +446,10 @@ "message": "Mező hozzáadása" }, "editField": { - "message": "Edit field" + "message": "Mező szerkesztése" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Biztosan véglegesen törlésre kerüljön ez a melléklet?" }, "fieldType": { "message": "Mezőtípus" diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index 0e9d55995d2..6527745e5cf 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -446,10 +446,10 @@ "message": "Pievienot lauku" }, "editField": { - "message": "Edit field" + "message": "Labot lauku" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Vai tiešām neatgriezeniski izdzēst šo pielikumu?" }, "fieldType": { "message": "Lauka veids" diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index 30177612d10..3503000b6b0 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -446,10 +446,10 @@ "message": "Pridať pole" }, "editField": { - "message": "Edit field" + "message": "Upraviť pole" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Naozaj chcete natrvalo odstrániť túto prílohu?" }, "fieldType": { "message": "Typ poľa" From ffaefff0a7a520190a25684ad539807090ff488b Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 12:30:19 +0000 Subject: [PATCH 08/36] Autosync the updated translations (#14698) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/browser/src/_locales/de/messages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 747dba5497c..a7871f6ebca 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -620,7 +620,7 @@ } }, "website": { - "message": "Webseite" + "message": "Website" }, "toggleVisibility": { "message": "Sichtbarkeit umschalten" @@ -3173,7 +3173,7 @@ "description": "Displayed with the address on the forwarding service's configuration screen." }, "forwarderGeneratedByWithWebsite": { - "message": "Webseite: $WEBSITE$. Von Bitwarden generiert.", + "message": "Website: $WEBSITE$. Von Bitwarden generiert.", "description": "Displayed with the address on the forwarding service's configuration screen.", "placeholders": { "WEBSITE": { From 9bdf5830bbb99c456545857e3398c8a38f8556e2 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 12:30:43 +0000 Subject: [PATCH 09/36] Autosync the updated translations (#14700) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/bg/messages.json | 6 +++--- apps/web/src/locales/de/messages.json | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index 209ebe5da0f..968adf2ac72 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -9414,19 +9414,19 @@ "message": "Управление на плащанията от Портала за доставчици" }, "continueSettingUp": { - "message": "Continue setting up Bitwarden" + "message": "Продължете настройването на Битуорден" }, "continueSettingUpFreeTrial": { "message": "Продължете настройването на безплатния пробен период на Буторден" }, "continueSettingUpPasswordManager": { - "message": "Continue setting up Bitwarden Password Manager" + "message": "Продължете настройването на Управителя на пароли Битуорден" }, "continueSettingUpFreeTrialPasswordManager": { "message": "Продължете настройването на безплатния пробен период на Управлението на пароли на Буторден" }, "continueSettingUpSecretsManager": { - "message": "Continue setting up Bitwarden Secrets Manager" + "message": "Продължете настройването на Управлелието на тайни в Битуорден" }, "continueSettingUpFreeTrialSecretsManager": { "message": "Продължете настройването на безплатния пробен период на Управлението на тайни на Буторден" diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index 0322bbeab13..0c3d29f602b 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -2081,7 +2081,7 @@ "message": "Domainregeln" }, "domainRulesDesc": { - "message": "Wenn Sie die gleiche Anmeldung über mehrere verschiedene Webseitendomänen hinweg haben, können Sie die Webseite als \"gleichwertig\" markieren. \"Globale\" Domänen wurden bereits von Bitwarden für Sie angelegt." + "message": "Wenn du die gleiche Anmeldung über mehrere verschiedene Websitendomains hinweg hast, kannst du die Website als \"gleichwertig\" markieren. \"Globale\" Domains wurden bereits von Bitwarden für dich angelegt." }, "globalEqDomains": { "message": "Globale gleichwertige Domains" @@ -2432,7 +2432,7 @@ "message": "Ungesicherte Websites gefunden" }, "unsecuredWebsitesFoundReportDesc": { - "message": "Wir haben $COUNT$ Einträge in deinem/deinen $VAULT$ mit ungeschützen URIs gefunden. Du solltest deren URI-Präfix in https:// ändern, wenn die Webseite dies zulässt.", + "message": "Wir haben $COUNT$ Einträge in deinem/deinen $VAULT$ mit ungeschützen URIs gefunden. Du solltest deren URI-Präfix in https:// ändern, wenn die Website dies zulässt.", "placeholders": { "count": { "content": "$1", @@ -2451,7 +2451,7 @@ "message": "Inaktive Zwei-Faktor-Authentifizierung" }, "inactive2faReportDesc": { - "message": "Die Zwei-Faktor-Authentifizierung (2FA) ist eine wichtige Sicherheitseinstellung, die dir bei der Absicherung deiner Konten hilft. Wenn eine Webseite 2FA anbietet, solltest du es immer aktivieren." + "message": "Die Zwei-Faktor-Authentifizierung (2FA) ist eine wichtige Sicherheitseinstellung, die dir bei der Absicherung deiner Konten hilft. Richte 2FA mit dem Bitwarden Authenticator für diese Konten ein oder verwende eine alternative Methode." }, "inactive2faFound": { "message": "Zugangsdaten ohne 2FA gefunden" @@ -2625,7 +2625,7 @@ "message": "Kompromittierte Daten" }, "website": { - "message": "Webseite" + "message": "Website" }, "affectedUsers": { "message": "Betroffene Benutzer" @@ -9426,7 +9426,7 @@ "message": "Setze die Einrichtung deiner kostenlosen Testversion des Bitwarden Passwort Managers fort" }, "continueSettingUpSecretsManager": { - "message": "Continue setting up Bitwarden Secrets Manager" + "message": "Setze die Einrichtung des Bitwarden Secrets Managers fort" }, "continueSettingUpFreeTrialSecretsManager": { "message": "Setze die Einrichtung deiner kostenlosen Testversion des Bitwarden Secrets Managers fort" From 625256b08ec86759f3b61ecbe773f9137ab8b648 Mon Sep 17 00:00:00 2001 From: Vicki League Date: Fri, 9 May 2025 08:54:40 -0400 Subject: [PATCH 10/36] [CL-680] Fix broken popup layout docs page (#14680) --- apps/browser/src/platform/popup/layout/popup-layout.mdx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/browser/src/platform/popup/layout/popup-layout.mdx b/apps/browser/src/platform/popup/layout/popup-layout.mdx index d88e0f199bb..017ee20b344 100644 --- a/apps/browser/src/platform/popup/layout/popup-layout.mdx +++ b/apps/browser/src/platform/popup/layout/popup-layout.mdx @@ -153,7 +153,7 @@ View the story source code to see examples of how to construct these types of pa Example of wrapping an extension page in the `popup-tab-navigation` component. - + ## Extension Page @@ -182,3 +182,10 @@ An example of how to center the default content. An example of what the loading state looks like. + +## Tab Navigation with Berry + +An example of what it looks like to show a notification berry on one of the popup tab navigation +buttons. + + From 4191bb9533d454ad895cf240dcce9467c00792d8 Mon Sep 17 00:00:00 2001 From: Todd Martin <106564991+trmartin4@users.noreply.github.com> Date: Fri, 9 May 2025 10:44:11 -0400 Subject: [PATCH 11/36] chore(captcha): [PM-15162] Remove handling of captcha enforcement and bypass token * Removed captcha references. * Removed connectors from webpack * Fixed extra parameter. * Resolve merge conflicts. * Fixed extra argument. * Fixed failing tests. * Fixed failing test. * Accessibility cookie cleanup * Cleaned up accessibility component. * Deleted old registration endpoint * Remove unused register request object. * Fixed merge error that changed font family. * Fixed formatting from merge. * Linting --- apps/browser/src/popup/scss/misc.scss | 6 - apps/cli/src/auth/commands/login.command.ts | 69 +------- apps/desktop/src/app/app-routing.module.ts | 2 - apps/desktop/src/app/app.module.ts | 2 - .../auth/accessibility-cookie.component.html | 34 ---- .../auth/accessibility-cookie.component.ts | 76 --------- apps/desktop/src/auth/preload.ts | 3 - apps/desktop/src/locales/en/messages.json | 31 ---- apps/desktop/src/scss/misc.scss | 6 - apps/desktop/src/scss/pages.scss | 2 - .../electron-main-messaging.service.ts | 4 - .../web-registration-finish.service.spec.ts | 46 ++--- .../app/auth/recover-two-factor.component.ts | 7 +- .../complete-trial-initiation.component.ts | 20 +-- apps/web/src/connectors/captcha-mobile.html | 23 --- apps/web/src/connectors/captcha-mobile.scss | 1 - apps/web/src/connectors/captcha.html | 17 -- apps/web/src/connectors/captcha.scss | 8 - apps/web/src/connectors/captcha.ts | 158 ------------------ apps/web/src/scss/plugins.scss | 6 - apps/web/webpack.config.js | 11 -- .../components/captcha-protected.component.ts | 67 -------- .../src/directives/api-action.directive.ts | 6 - ...efault-registration-finish.service.spec.ts | 14 +- .../default-registration-finish.service.ts | 6 +- .../registration-finish.component.ts | 10 +- .../registration-finish.service.ts | 4 +- .../two-factor-auth.component.spec.ts | 1 - .../two-factor-auth.component.ts | 1 - .../abstractions/login-strategy.service.ts | 11 +- .../auth-request-login.strategy.ts | 8 +- .../login-strategies/login.strategy.spec.ts | 31 ---- .../common/login-strategies/login.strategy.ts | 22 +-- .../password-login.strategy.spec.ts | 14 +- .../password-login.strategy.ts | 19 +-- .../login-strategies/sso-login.strategy.ts | 1 - .../user-api-login.strategy.ts | 1 - .../webauthn-login.strategy.spec.ts | 2 - .../webauthn-login.strategy.ts | 1 - .../common/models/domain/login-credentials.ts | 2 - .../login-strategy.service.spec.ts | 4 +- .../login-strategy.service.ts | 9 +- .../login-strategy.state.spec.ts | 3 +- libs/common/src/abstractions/api.service.ts | 9 +- .../auth/abstractions/account-api.service.ts | 5 +- libs/common/src/auth/captcha-iframe.ts | 39 ----- libs/common/src/auth/iframe-component.ts | 96 ----------- .../src/auth/models/domain/auth-result.ts | 6 - .../request/captcha-protected.request.ts | 5 - .../identity-token/password-token.request.ts | 8 +- .../response/captcha-protected.response.ts | 3 - .../response/identity-captcha.response.ts | 10 -- .../identity-device-verification.response.ts | 3 - .../response/identity-two-factor.response.ts | 2 - .../auth/models/response/register.response.ts | 12 -- .../src/auth/services/account-api.service.ts | 2 +- .../src/models/request/register.request.ts | 31 ---- .../src/models/response/error.response.ts | 6 - libs/common/src/services/api.service.ts | 27 +-- 59 files changed, 56 insertions(+), 977 deletions(-) delete mode 100644 apps/desktop/src/auth/accessibility-cookie.component.html delete mode 100644 apps/desktop/src/auth/accessibility-cookie.component.ts delete mode 100644 apps/web/src/connectors/captcha-mobile.html delete mode 100644 apps/web/src/connectors/captcha-mobile.scss delete mode 100644 apps/web/src/connectors/captcha.html delete mode 100644 apps/web/src/connectors/captcha.scss delete mode 100644 apps/web/src/connectors/captcha.ts delete mode 100644 libs/angular/src/auth/components/captcha-protected.component.ts delete mode 100644 libs/common/src/auth/captcha-iframe.ts delete mode 100644 libs/common/src/auth/iframe-component.ts delete mode 100644 libs/common/src/auth/models/request/captcha-protected.request.ts delete mode 100644 libs/common/src/auth/models/response/captcha-protected.response.ts delete mode 100644 libs/common/src/auth/models/response/identity-captcha.response.ts delete mode 100644 libs/common/src/auth/models/response/register.response.ts delete mode 100644 libs/common/src/models/request/register.request.ts diff --git a/apps/browser/src/popup/scss/misc.scss b/apps/browser/src/popup/scss/misc.scss index 8aace90d0a6..006e1d35f6a 100644 --- a/apps/browser/src/popup/scss/misc.scss +++ b/apps/browser/src/popup/scss/misc.scss @@ -211,12 +211,6 @@ p.lead { } } -#hcaptcha_iframe { - width: 100%; - border: none; - transition: height 0.25s linear; -} - body.linux-webauthn { width: 485px !important; #web-authn-frame { diff --git a/apps/cli/src/auth/commands/login.command.ts b/apps/cli/src/auth/commands/login.command.ts index b26ce94207d..3ad71c62e66 100644 --- a/apps/cli/src/auth/commands/login.command.ts +++ b/apps/cli/src/auth/commands/login.command.ts @@ -33,7 +33,6 @@ import { ClientType } from "@bitwarden/common/enums"; import { CryptoFunctionService } from "@bitwarden/common/key-management/crypto/abstractions/crypto-function.service"; import { KeyConnectorService } from "@bitwarden/common/key-management/key-connector/abstractions/key-connector.service"; import { MasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; -import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -222,7 +221,7 @@ export class LoginCommand { ); } else { response = await this.loginStrategyService.logIn( - new PasswordLoginCredentials(email, password, null, twoFactor), + new PasswordLoginCredentials(email, password, twoFactor), ); } if (response.requiresEncryptionKeyMigration) { @@ -230,17 +229,6 @@ export class LoginCommand { "Encryption key migration required. Please login through the web vault to update your encryption key.", ); } - if (response.captchaSiteKey) { - const credentials = new PasswordLoginCredentials(email, password); - const handledResponse = await this.handleCaptchaRequired(twoFactor, credentials); - - // Error Response - if (handledResponse instanceof Response) { - return handledResponse; - } else { - response = handledResponse; - } - } if (response.requiresTwoFactor) { const twoFactorProviders = await this.twoFactorService.getSupportedProviders(null); if (twoFactorProviders.length === 0) { @@ -312,7 +300,6 @@ export class LoginCommand { response = await this.loginStrategyService.logInTwoFactor( new TokenTwoFactorRequest(selectedProvider.type, twoFactorToken), - null, ); } @@ -336,18 +323,6 @@ export class LoginCommand { response = await this.loginStrategyService.logInNewDeviceVerification(newDeviceToken); } - if (response.captchaSiteKey) { - const twoFactorRequest = new TokenTwoFactorRequest(selectedProvider.type, twoFactorToken); - const handledResponse = await this.handleCaptchaRequired(twoFactorRequest); - - // Error Response - if (handledResponse instanceof Response) { - return handledResponse; - } else { - response = handledResponse; - } - } - if (response.requiresTwoFactor) { return Response.error("Login failed."); } @@ -629,48 +604,6 @@ export class LoginCommand { return { newPasswordHash, newUserKey: newUserKey, hint: masterPasswordHint }; } - private async handleCaptchaRequired( - twoFactorRequest: TokenTwoFactorRequest, - credentials: PasswordLoginCredentials = null, - ): Promise { - const badCaptcha = Response.badRequest( - "Your authentication request has been flagged and will require user interaction to proceed.\n" + - "Please use your API key to validate this request and ensure BW_CLIENTSECRET is correct, if set.\n" + - "(https://bitwarden.com/help/cli-auth-challenges)", - ); - - try { - const captchaClientSecret = await this.apiClientSecret(true); - if (Utils.isNullOrWhitespace(captchaClientSecret)) { - return badCaptcha; - } - - let authResultResponse: AuthResult = null; - if (credentials != null) { - credentials.captchaToken = captchaClientSecret; - credentials.twoFactor = twoFactorRequest; - authResultResponse = await this.loginStrategyService.logIn(credentials); - } else { - authResultResponse = await this.loginStrategyService.logInTwoFactor( - twoFactorRequest, - captchaClientSecret, - ); - } - - return authResultResponse; - } catch (e) { - if ( - e instanceof ErrorResponse || - (e.constructor.name === ErrorResponse.name && - (e as ErrorResponse).message.includes("Captcha is invalid")) - ) { - return badCaptcha; - } else { - return Response.error(e); - } - } - } - private async apiClientId(): Promise { let clientId: string = null; diff --git a/apps/desktop/src/app/app-routing.module.ts b/apps/desktop/src/app/app-routing.module.ts index 70c40ee8f6f..938edafddd4 100644 --- a/apps/desktop/src/app/app-routing.module.ts +++ b/apps/desktop/src/app/app-routing.module.ts @@ -44,7 +44,6 @@ import { import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { LockComponent } from "@bitwarden/key-management-ui"; -import { AccessibilityCookieComponent } from "../auth/accessibility-cookie.component"; import { maxAccountsGuardFn } from "../auth/guards/max-accounts.guard"; import { SetPasswordComponent } from "../auth/set-password.component"; import { UpdateTempPasswordComponent } from "../auth/update-temp-password.component"; @@ -111,7 +110,6 @@ const routes: Routes = [ canActivate: [authGuard], }, }), - { path: "accessibility-cookie", component: AccessibilityCookieComponent }, { path: "set-password", component: SetPasswordComponent }, { path: "send", diff --git a/apps/desktop/src/app/app.module.ts b/apps/desktop/src/app/app.module.ts index 15ab4350bbc..9b2472106dd 100644 --- a/apps/desktop/src/app/app.module.ts +++ b/apps/desktop/src/app/app.module.ts @@ -10,7 +10,6 @@ import { ColorPasswordCountPipe } from "@bitwarden/angular/pipes/color-password- import { ColorPasswordPipe } from "@bitwarden/angular/pipes/color-password.pipe"; import { CalloutModule, DialogModule } from "@bitwarden/components"; -import { AccessibilityCookieComponent } from "../auth/accessibility-cookie.component"; import { DeleteAccountComponent } from "../auth/delete-account.component"; import { LoginModule } from "../auth/login/login.module"; import { SetPasswordComponent } from "../auth/set-password.component"; @@ -59,7 +58,6 @@ import { SharedModule } from "./shared/shared.module"; VaultV2Component, ], declarations: [ - AccessibilityCookieComponent, AccountSwitcherComponent, AddEditComponent, AddEditCustomFieldsComponent, diff --git a/apps/desktop/src/auth/accessibility-cookie.component.html b/apps/desktop/src/auth/accessibility-cookie.component.html deleted file mode 100644 index e81f754cd74..00000000000 --- a/apps/desktop/src/auth/accessibility-cookie.component.html +++ /dev/null @@ -1,34 +0,0 @@ - diff --git a/apps/desktop/src/auth/accessibility-cookie.component.ts b/apps/desktop/src/auth/accessibility-cookie.component.ts deleted file mode 100644 index ccaacfe757c..00000000000 --- a/apps/desktop/src/auth/accessibility-cookie.component.ts +++ /dev/null @@ -1,76 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Component, NgZone } from "@angular/core"; -import { UntypedFormControl, UntypedFormGroup, Validators } from "@angular/forms"; -import { Router } from "@angular/router"; - -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { ToastService } from "@bitwarden/components"; - -@Component({ - selector: "app-accessibility-cookie", - templateUrl: "accessibility-cookie.component.html", -}) -export class AccessibilityCookieComponent { - listenForCookie = false; - hCaptchaWindow: Window; - - accessibilityForm = new UntypedFormGroup({ - link: new UntypedFormControl("", Validators.required), - }); - - constructor( - protected router: Router, - protected platformUtilsService: PlatformUtilsService, - protected environmentService: EnvironmentService, - protected i18nService: I18nService, - protected ngZone: NgZone, - private toastService: ToastService, - ) {} - - registerhCaptcha() { - this.platformUtilsService.launchUri("https://www.hcaptcha.com/accessibility"); - } - - async close() { - const [cookie] = await ipc.auth.getHcaptchaAccessibilityCookie(); - if (cookie) { - this.onCookieSavedSuccess(); - } else { - this.onCookieSavedFailure(); - } - await this.router.navigate(["/login"]); - } - - onCookieSavedSuccess() { - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("accessibilityCookieSaved"), - }); - } - - onCookieSavedFailure() { - this.toastService.showToast({ - variant: "error", - title: null, - message: this.i18nService.t("noAccessibilityCookieSaved"), - }); - } - - async submit() { - if (Utils.getHostname(this.accessibilityForm.value.link) !== "accounts.hcaptcha.com") { - this.toastService.showToast({ - variant: "error", - title: this.i18nService.t("errorOccurred"), - message: this.i18nService.t("invalidUrl"), - }); - return; - } - this.listenForCookie = true; - window.open(this.accessibilityForm.value.link, "_blank", "noopener noreferrer"); - } -} diff --git a/apps/desktop/src/auth/preload.ts b/apps/desktop/src/auth/preload.ts index 91321d62d82..7c213934659 100644 --- a/apps/desktop/src/auth/preload.ts +++ b/apps/desktop/src/auth/preload.ts @@ -1,9 +1,6 @@ import { ipcRenderer } from "electron"; export default { - getHcaptchaAccessibilityCookie: (): Promise<[string]> => - ipcRenderer.invoke("getCookie", { url: "https://www.hcaptcha.com/", name: "hc_accessibility" }), - loginRequest: (alertTitle: string, alertBody: string, buttonText: string): Promise => ipcRenderer.invoke("loginRequest", { alertTitle, diff --git a/apps/desktop/src/locales/en/messages.json b/apps/desktop/src/locales/en/messages.json index 306a0432233..681a0e3147c 100644 --- a/apps/desktop/src/locales/en/messages.json +++ b/apps/desktop/src/locales/en/messages.json @@ -1725,40 +1725,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" diff --git a/apps/desktop/src/scss/misc.scss b/apps/desktop/src/scss/misc.scss index 885040cc6f9..ce03406dd24 100644 --- a/apps/desktop/src/scss/misc.scss +++ b/apps/desktop/src/scss/misc.scss @@ -252,12 +252,6 @@ p.lead { } } -#hcaptcha_iframe { - width: 100%; - border: none; - transition: height 0.25s linear; -} - form, .form { .form-group { diff --git a/apps/desktop/src/scss/pages.scss b/apps/desktop/src/scss/pages.scss index 155ffaf0ad1..4098ad860dd 100644 --- a/apps/desktop/src/scss/pages.scss +++ b/apps/desktop/src/scss/pages.scss @@ -23,7 +23,6 @@ } } -#accessibility-cookie-page, #register-page, #hint-page, #update-temp-password-page, @@ -43,7 +42,6 @@ } } -#accessibility-cookie-page, #register-page, #hint-page, #lock-page, diff --git a/apps/desktop/src/services/electron-main-messaging.service.ts b/apps/desktop/src/services/electron-main-messaging.service.ts index 150890bf56f..f8b363d390e 100644 --- a/apps/desktop/src/services/electron-main-messaging.service.ts +++ b/apps/desktop/src/services/electron-main-messaging.service.ts @@ -52,10 +52,6 @@ export class ElectronMainMessagingService implements MessageSender { return windowMain.win?.isVisible(); }); - ipcMain.handle("getCookie", async (event, options) => { - return await this.windowMain.session.cookies.get(options); - }); - ipcMain.handle("loginRequest", async (event, options) => { const alert = new Notification({ title: options.alertTitle, diff --git a/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts b/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts index aa02e28b3b3..edce551342e 100644 --- a/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts +++ b/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts @@ -172,7 +172,6 @@ describe("WebRegistrationFinishService", () => { let userKey: UserKey; let userKeyEncString: EncString; let userKeyPair: [string, EncString]; - let capchaBypassToken: string; let orgInvite: OrganizationInvite; let orgSponsoredFreeFamilyPlanToken: string; @@ -198,7 +197,6 @@ describe("WebRegistrationFinishService", () => { userKeyEncString = new EncString("userKeyEncrypted"); userKeyPair = ["publicKey", new EncString("privateKey")]; - capchaBypassToken = "capchaBypassToken"; orgInvite = new OrganizationInvite(); orgInvite.organizationUserId = "organizationUserId"; @@ -219,19 +217,13 @@ describe("WebRegistrationFinishService", () => { ); }); - it("registers the user and returns a captcha bypass token when given valid email verification input", async () => { + it("registers the user when given valid email verification input", async () => { keyService.makeUserKey.mockResolvedValue([userKey, userKeyEncString]); keyService.makeKeyPair.mockResolvedValue(userKeyPair); - accountApiService.registerFinish.mockResolvedValue(capchaBypassToken); + accountApiService.registerFinish.mockResolvedValue(); acceptOrgInviteService.getOrganizationInvite.mockResolvedValue(null); - const result = await service.finishRegistration( - email, - passwordInputResult, - emailVerificationToken, - ); - - expect(result).toEqual(capchaBypassToken); + await service.finishRegistration(email, passwordInputResult, emailVerificationToken); expect(keyService.makeUserKey).toHaveBeenCalledWith(masterKey); expect(keyService.makeKeyPair).toHaveBeenCalledWith(userKey); @@ -261,15 +253,13 @@ describe("WebRegistrationFinishService", () => { ); }); - it("it registers the user and returns a captcha bypass token when given an org invite", async () => { + it("it registers the user when given an org invite", async () => { keyService.makeUserKey.mockResolvedValue([userKey, userKeyEncString]); keyService.makeKeyPair.mockResolvedValue(userKeyPair); - accountApiService.registerFinish.mockResolvedValue(capchaBypassToken); + accountApiService.registerFinish.mockResolvedValue(); acceptOrgInviteService.getOrganizationInvite.mockResolvedValue(orgInvite); - const result = await service.finishRegistration(email, passwordInputResult); - - expect(result).toEqual(capchaBypassToken); + await service.finishRegistration(email, passwordInputResult); expect(keyService.makeUserKey).toHaveBeenCalledWith(masterKey); expect(keyService.makeKeyPair).toHaveBeenCalledWith(userKey); @@ -299,21 +289,19 @@ describe("WebRegistrationFinishService", () => { ); }); - it("registers the user and returns a captcha bypass token when given an org sponsored free family plan token", async () => { + it("registers the user when given an org sponsored free family plan token", async () => { keyService.makeUserKey.mockResolvedValue([userKey, userKeyEncString]); keyService.makeKeyPair.mockResolvedValue(userKeyPair); - accountApiService.registerFinish.mockResolvedValue(capchaBypassToken); + accountApiService.registerFinish.mockResolvedValue(); acceptOrgInviteService.getOrganizationInvite.mockResolvedValue(null); - const result = await service.finishRegistration( + await service.finishRegistration( email, passwordInputResult, undefined, orgSponsoredFreeFamilyPlanToken, ); - expect(result).toEqual(capchaBypassToken); - expect(keyService.makeUserKey).toHaveBeenCalledWith(masterKey); expect(keyService.makeKeyPair).toHaveBeenCalledWith(userKey); expect(accountApiService.registerFinish).toHaveBeenCalledWith( @@ -342,13 +330,13 @@ describe("WebRegistrationFinishService", () => { ); }); - it("registers the user and returns a captcha bypass token when given an emergency access invite token", async () => { + it("registers the user when given an emergency access invite token", async () => { keyService.makeUserKey.mockResolvedValue([userKey, userKeyEncString]); keyService.makeKeyPair.mockResolvedValue(userKeyPair); - accountApiService.registerFinish.mockResolvedValue(capchaBypassToken); + accountApiService.registerFinish.mockResolvedValue(); acceptOrgInviteService.getOrganizationInvite.mockResolvedValue(null); - const result = await service.finishRegistration( + await service.finishRegistration( email, passwordInputResult, undefined, @@ -357,8 +345,6 @@ describe("WebRegistrationFinishService", () => { emergencyAccessId, ); - expect(result).toEqual(capchaBypassToken); - expect(keyService.makeUserKey).toHaveBeenCalledWith(masterKey); expect(keyService.makeKeyPair).toHaveBeenCalledWith(userKey); expect(accountApiService.registerFinish).toHaveBeenCalledWith( @@ -387,13 +373,13 @@ describe("WebRegistrationFinishService", () => { ); }); - it("registers the user and returns a captcha bypass token when given a provider invite token", async () => { + it("registers the user when given a provider invite token", async () => { keyService.makeUserKey.mockResolvedValue([userKey, userKeyEncString]); keyService.makeKeyPair.mockResolvedValue(userKeyPair); - accountApiService.registerFinish.mockResolvedValue(capchaBypassToken); + accountApiService.registerFinish.mockResolvedValue(); acceptOrgInviteService.getOrganizationInvite.mockResolvedValue(null); - const result = await service.finishRegistration( + await service.finishRegistration( email, passwordInputResult, undefined, @@ -404,8 +390,6 @@ describe("WebRegistrationFinishService", () => { providerUserId, ); - expect(result).toEqual(capchaBypassToken); - expect(keyService.makeUserKey).toHaveBeenCalledWith(masterKey); expect(keyService.makeKeyPair).toHaveBeenCalledWith(userKey); expect(accountApiService.registerFinish).toHaveBeenCalledWith( diff --git a/apps/web/src/app/auth/recover-two-factor.component.ts b/apps/web/src/app/auth/recover-two-factor.component.ts index 08881b64f37..106cd32a945 100644 --- a/apps/web/src/app/auth/recover-two-factor.component.ts +++ b/apps/web/src/app/auth/recover-two-factor.component.ts @@ -80,12 +80,7 @@ export class RecoverTwoFactorComponent implements OnInit { remember: false, }; - const credentials = new PasswordLoginCredentials( - email, - this.masterPassword, - "", - twoFactorRequest, - ); + const credentials = new PasswordLoginCredentials(email, this.masterPassword, twoFactorRequest); try { const authResult = await this.loginStrategyService.logIn(credentials); diff --git a/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts b/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts index 418fd67affb..90df6e513c4 100644 --- a/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts +++ b/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts @@ -366,14 +366,9 @@ export class CompleteTrialInitiationComponent implements OnInit, OnDestroy { return; } - const captchaToken = await this.finishRegistration(passwordInputResult); + await this.finishRegistration(passwordInputResult); - if (captchaToken == null) { - this.submitting = false; - return; - } - - await this.logIn(passwordInputResult.newPassword, captchaToken); + await this.logIn(passwordInputResult.newPassword); this.submitting = false; @@ -389,14 +384,9 @@ export class CompleteTrialInitiationComponent implements OnInit, OnDestroy { } } - /** Logs the user in based using the token received by the `finishRegistration` method */ - private async logIn(masterPassword: string, captchaBypassToken: string): Promise { - const credentials = new PasswordLoginCredentials( - this.email, - masterPassword, - captchaBypassToken, - null, - ); + /** Logs the user in */ + private async logIn(masterPassword: string): Promise { + const credentials = new PasswordLoginCredentials(this.email, masterPassword); await this.loginStrategyService.logIn(credentials); } diff --git a/apps/web/src/connectors/captcha-mobile.html b/apps/web/src/connectors/captcha-mobile.html deleted file mode 100644 index 51c4335777c..00000000000 --- a/apps/web/src/connectors/captcha-mobile.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - Bitwarden Captcha Connector - - - -
-
- -

Captcha Required

-
-
-
- - diff --git a/apps/web/src/connectors/captcha-mobile.scss b/apps/web/src/connectors/captcha-mobile.scss deleted file mode 100644 index a4c7f9b25b7..00000000000 --- a/apps/web/src/connectors/captcha-mobile.scss +++ /dev/null @@ -1 +0,0 @@ -@import "../scss/styles.scss"; diff --git a/apps/web/src/connectors/captcha.html b/apps/web/src/connectors/captcha.html deleted file mode 100644 index c9df2a62aed..00000000000 --- a/apps/web/src/connectors/captcha.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - Bitwarden Captcha Connector - - - -
- - diff --git a/apps/web/src/connectors/captcha.scss b/apps/web/src/connectors/captcha.scss deleted file mode 100644 index d044c06ff22..00000000000 --- a/apps/web/src/connectors/captcha.scss +++ /dev/null @@ -1,8 +0,0 @@ -body { - min-width: 0px !important; - padding: 0; - margin: 0; - background: transparent; - display: flex; - justify-content: center; -} diff --git a/apps/web/src/connectors/captcha.ts b/apps/web/src/connectors/captcha.ts deleted file mode 100644 index aad6eaa3d47..00000000000 --- a/apps/web/src/connectors/captcha.ts +++ /dev/null @@ -1,158 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { b64Decode, getQsParam } from "./common"; - -declare let hcaptcha: any; - -if (window.location.pathname.includes("mobile")) { - // FIXME: Remove when updating file. Eslint update - // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./captcha-mobile.scss"); -} else { - // FIXME: Remove when updating file. Eslint update - // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./captcha.scss"); -} - -document.addEventListener("DOMContentLoaded", () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - init(); -}); - -(window as any).captchaSuccess = captchaSuccess; -(window as any).captchaError = captchaError; - -let parentUrl: string = null; -let parentOrigin: string = null; -let mobileResponse: boolean = null; -let sentSuccess = false; - -async function init() { - await start(); - onMessage(); -} - -async function start() { - sentSuccess = false; - - const data = getQsParam("data"); - if (!data) { - error("No data."); - return; - } - - parentUrl = getQsParam("parent"); - if (!parentUrl) { - error("No parent."); - return; - } else { - parentUrl = decodeURIComponent(parentUrl); - parentOrigin = new URL(parentUrl).origin; - } - - let decodedData: any; - try { - decodedData = JSON.parse(b64Decode(data, true)); - // FIXME: Remove when updating file. Eslint update - // eslint-disable-next-line @typescript-eslint/no-unused-vars - } catch (e) { - error("Cannot parse data."); - return; - } - mobileResponse = decodedData.callbackUri != null || decodedData.mobile === true; - - let src = "https://hcaptcha.com/1/api.js?render=explicit"; - - // Set language code - if (decodedData.locale) { - src += `&hl=${encodeURIComponent(decodedData.locale) ?? "en"}`; - } - - // Set captchaRequired subtitle for mobile - const subtitleEl = document.getElementById("captchaRequired"); - if (decodedData.captchaRequiredText && subtitleEl) { - subtitleEl.textContent = decodedData.captchaRequiredText; - } - - const script = document.createElement("script"); - script.src = src; - script.async = true; - script.defer = true; - script.addEventListener("load", () => { - hcaptcha.render("captcha", { - sitekey: encodeURIComponent(decodedData.siteKey), - callback: "captchaSuccess", - "error-callback": "captchaError", - }); - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - watchHeight(); - }); - document.head.appendChild(script); -} - -function captchaSuccess(response: string) { - if (mobileResponse) { - document.location.replace("bitwarden://captcha-callback?token=" + encodeURIComponent(response)); - } else { - success(response); - } -} - -function captchaError() { - error("An error occurred with the captcha. Try again."); -} - -function onMessage() { - window.addEventListener( - "message", - (event) => { - if (!event.origin || event.origin === "" || event.origin !== parentOrigin) { - return; - } - - if (event.data === "start") { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - start(); - } - }, - false, - ); -} - -function error(message: string) { - parent.postMessage("error|" + message, parentUrl); -} - -function success(data: string) { - if (sentSuccess) { - return; - } - parent.postMessage("success|" + data, parentUrl); - sentSuccess = true; -} - -function info(message: string | object) { - parent.postMessage("info|" + JSON.stringify(message), parentUrl); -} - -async function watchHeight() { - const imagesDiv = document.body.lastChild as HTMLElement; - // eslint-disable-next-line - while (true) { - info({ - height: - imagesDiv.style.visibility === "hidden" - ? document.documentElement.offsetHeight - : document.documentElement.scrollHeight, - width: document.documentElement.scrollWidth, - }); - await sleep(100); - } -} - -async function sleep(ms: number) { - await new Promise((r) => setTimeout(r, ms)); -} diff --git a/apps/web/src/scss/plugins.scss b/apps/web/src/scss/plugins.scss index d150a4367d5..721c2420187 100644 --- a/apps/web/src/scss/plugins.scss +++ b/apps/web/src/scss/plugins.scss @@ -24,12 +24,6 @@ } } -#hcaptcha_iframe { - border: none; - transition: height 0.25s linear; - width: 100%; -} - @each $mfaType in $mfaTypes { .mfaType#{$mfaType} { content: url("../images/two-factor/" + $mfaType + ".png"); diff --git a/apps/web/webpack.config.js b/apps/web/webpack.config.js index a4ac3322200..d8b9fd3dbee 100644 --- a/apps/web/webpack.config.js +++ b/apps/web/webpack.config.js @@ -129,16 +129,6 @@ const plugins = [ filename: "redirect-connector.html", chunks: ["connectors/redirect", "styles"], }), - new HtmlWebpackPlugin({ - template: "./src/connectors/captcha.html", - filename: "captcha-connector.html", - chunks: ["connectors/captcha"], - }), - new HtmlWebpackPlugin({ - template: "./src/connectors/captcha-mobile.html", - filename: "captcha-mobile-connector.html", - chunks: ["connectors/captcha"], - }), new HtmlWebpackPlugin({ template: "./src/connectors/duo-redirect.html", filename: "duo-redirect-connector.html", @@ -344,7 +334,6 @@ const webpackConfig = { "connectors/webauthn": "./src/connectors/webauthn.ts", "connectors/webauthn-fallback": "./src/connectors/webauthn-fallback.ts", "connectors/sso": "./src/connectors/sso.ts", - "connectors/captcha": "./src/connectors/captcha.ts", "connectors/duo-redirect": "./src/connectors/duo-redirect.ts", "connectors/redirect": "./src/connectors/redirect.ts", styles: ["./src/scss/styles.scss", "./src/scss/tailwind.css"], diff --git a/libs/angular/src/auth/components/captcha-protected.component.ts b/libs/angular/src/auth/components/captcha-protected.component.ts deleted file mode 100644 index 76e62a38b4d..00000000000 --- a/libs/angular/src/auth/components/captcha-protected.component.ts +++ /dev/null @@ -1,67 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Directive, Input } from "@angular/core"; -import { firstValueFrom } from "rxjs"; - -import { CaptchaIFrame } from "@bitwarden/common/auth/captcha-iframe"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { ToastService } from "@bitwarden/components"; - -@Directive() -export abstract class CaptchaProtectedComponent { - @Input() captchaSiteKey: string = null; - captchaToken: string = null; - captcha: CaptchaIFrame; - - constructor( - protected environmentService: EnvironmentService, - protected i18nService: I18nService, - protected platformUtilsService: PlatformUtilsService, - protected toastService: ToastService, - ) {} - - async setupCaptcha() { - const env = await firstValueFrom(this.environmentService.environment$); - const webVaultUrl = env.getWebVaultUrl(); - - this.captcha = new CaptchaIFrame( - window, - webVaultUrl, - this.i18nService, - (token: string) => { - this.captchaToken = token; - }, - (error: string) => { - this.toastService.showToast({ - variant: "error", - title: this.i18nService.t("errorOccurred"), - message: error, - }); - }, - (info: string) => { - this.toastService.showToast({ - variant: "info", - title: this.i18nService.t("info"), - message: info, - }); - }, - ); - } - - showCaptcha() { - return !Utils.isNullOrWhitespace(this.captchaSiteKey); - } - - protected handleCaptchaRequired(response: { captchaSiteKey: string }): boolean { - if (Utils.isNullOrWhitespace(response.captchaSiteKey)) { - return false; - } - - this.captchaSiteKey = response.captchaSiteKey; - this.captcha.init(response.captchaSiteKey); - return true; - } -} diff --git a/libs/angular/src/directives/api-action.directive.ts b/libs/angular/src/directives/api-action.directive.ts index e71af9cdffe..a07ab7d0413 100644 --- a/libs/angular/src/directives/api-action.directive.ts +++ b/libs/angular/src/directives/api-action.directive.ts @@ -2,7 +2,6 @@ // @ts-strict-ignore import { Directive, ElementRef, Input, OnChanges } from "@angular/core"; -import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; @@ -39,11 +38,6 @@ export class ApiActionDirective implements OnChanges { }, (e: any) => { this.el.nativeElement.loading = false; - - if ((e as ErrorResponse).captchaRequired) { - this.logService.error("Captcha required error response: " + e.getSingleMessage()); - return; - } this.logService?.error(`Received API exception:`, e); this.validationService.showError(e); }, diff --git a/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.spec.ts b/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.spec.ts index c288f30d812..8977338424b 100644 --- a/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.spec.ts +++ b/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.spec.ts @@ -52,7 +52,6 @@ describe("DefaultRegistrationFinishService", () => { let userKey: UserKey; let userKeyEncString: EncString; let userKeyPair: [string, EncString]; - let capchaBypassToken: string; beforeEach(() => { email = "test@email.com"; @@ -71,7 +70,6 @@ describe("DefaultRegistrationFinishService", () => { userKeyEncString = new EncString("userKeyEncrypted"); userKeyPair = ["publicKey", new EncString("privateKey")]; - capchaBypassToken = "capchaBypassToken"; }); it("throws an error if the user key cannot be created", async () => { @@ -82,18 +80,12 @@ describe("DefaultRegistrationFinishService", () => { ); }); - it("registers the user and returns a captcha bypass token when given valid email verification input", async () => { + it("registers the user when given valid email verification input", async () => { keyService.makeUserKey.mockResolvedValue([userKey, userKeyEncString]); keyService.makeKeyPair.mockResolvedValue(userKeyPair); - accountApiService.registerFinish.mockResolvedValue(capchaBypassToken); + accountApiService.registerFinish.mockResolvedValue(); - const result = await service.finishRegistration( - email, - passwordInputResult, - emailVerificationToken, - ); - - expect(result).toEqual(capchaBypassToken); + await service.finishRegistration(email, passwordInputResult, emailVerificationToken); expect(keyService.makeUserKey).toHaveBeenCalledWith(masterKey); expect(keyService.makeKeyPair).toHaveBeenCalledWith(userKey); diff --git a/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.ts b/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.ts index 7d844ce8cb0..d1820eabe25 100644 --- a/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.ts +++ b/libs/auth/src/angular/registration/registration-finish/default-registration-finish.service.ts @@ -34,7 +34,7 @@ export class DefaultRegistrationFinishService implements RegistrationFinishServi emergencyAccessId?: string, providerInviteToken?: string, providerUserId?: string, - ): Promise { + ): Promise { const [newUserKey, newEncUserKey] = await this.keyService.makeUserKey( passwordInputResult.masterKey, ); @@ -57,9 +57,7 @@ export class DefaultRegistrationFinishService implements RegistrationFinishServi providerUserId, ); - const capchaBypassToken = await this.accountApiService.registerFinish(registerRequest); - - return capchaBypassToken; + return await this.accountApiService.registerFinish(registerRequest); } protected async buildRegisterRequest( diff --git a/libs/auth/src/angular/registration/registration-finish/registration-finish.component.ts b/libs/auth/src/angular/registration/registration-finish/registration-finish.component.ts index 506b7475db1..db8fd045f30 100644 --- a/libs/auth/src/angular/registration/registration-finish/registration-finish.component.ts +++ b/libs/auth/src/angular/registration/registration-finish/registration-finish.component.ts @@ -152,9 +152,8 @@ export class RegistrationFinishComponent implements OnInit, OnDestroy { async handlePasswordFormSubmit(passwordInputResult: PasswordInputResult) { this.submitting = true; - let captchaBypassToken: string = null; try { - captchaBypassToken = await this.registrationFinishService.finishRegistration( + await this.registrationFinishService.finishRegistration( this.email, passwordInputResult, this.emailVerificationToken, @@ -179,12 +178,7 @@ export class RegistrationFinishComponent implements OnInit, OnDestroy { // login with the new account try { - const credentials = new PasswordLoginCredentials( - this.email, - passwordInputResult.newPassword, - captchaBypassToken, - null, - ); + const credentials = new PasswordLoginCredentials(this.email, passwordInputResult.newPassword); const authenticationResult = await this.loginStrategyService.logIn(credentials); diff --git a/libs/auth/src/angular/registration/registration-finish/registration-finish.service.ts b/libs/auth/src/angular/registration/registration-finish/registration-finish.service.ts index 3746e37b84a..5f3c04e5155 100644 --- a/libs/auth/src/angular/registration/registration-finish/registration-finish.service.ts +++ b/libs/auth/src/angular/registration/registration-finish/registration-finish.service.ts @@ -27,7 +27,7 @@ export abstract class RegistrationFinishService { * @param emergencyAccessId The optional emergency access id which is required to validate the emergency access invite token. * @param providerInviteToken The optional provider invite token. * @param providerUserId The optional provider user id which is required to validate the provider invite token. - * @returns a promise which resolves to the captcha bypass token string upon a successful account creation. + * @returns a promise which resolves upon a successful account creation. */ abstract finishRegistration( email: string, @@ -38,5 +38,5 @@ export abstract class RegistrationFinishService { emergencyAccessId?: string, providerInviteToken?: string, providerUserId?: string, - ): Promise; + ): Promise; } diff --git a/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.spec.ts b/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.spec.ts index d48d725e251..de3fa7a3321 100644 --- a/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.spec.ts +++ b/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.spec.ts @@ -260,7 +260,6 @@ describe("TwoFactorAuthComponent", () => { // Assert expect(mockLoginStrategyService.logInTwoFactor).toHaveBeenCalledWith( new TokenTwoFactorRequest(component.selectedProviderType, token, remember), - "", ); }); diff --git a/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts b/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts index e7e62260b49..6db56c8e484 100644 --- a/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts +++ b/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts @@ -335,7 +335,6 @@ export class TwoFactorAuthComponent implements OnInit, OnDestroy { try { this.formPromise = this.loginStrategyService.logInTwoFactor( new TokenTwoFactorRequest(this.selectedProviderType, tokenValue, rememberValue), - "", // TODO: PM-15162 - deprecate captchaResponse ); const authResult: AuthResult = await this.formPromise; this.logService.info("Successfully submitted two factor token"); diff --git a/libs/auth/src/common/abstractions/login-strategy.service.ts b/libs/auth/src/common/abstractions/login-strategy.service.ts index e9fa780b0fe..b0fffae2ab4 100644 --- a/libs/auth/src/common/abstractions/login-strategy.service.ts +++ b/libs/auth/src/common/abstractions/login-strategy.service.ts @@ -59,16 +59,11 @@ export abstract class LoginStrategyServiceAbstraction { | WebAuthnLoginCredentials, ) => Promise; /** - * Sends a token request to the server with the provided two factor token - * and captcha response. This uses data stored from {@link LoginStrategyServiceAbstraction.logIn}, - * so that must be called first. + * Sends a token request to the server with the provided two factor token. + * This uses data stored from {@link LoginStrategyServiceAbstraction.logIn}, so that must be called first. * Returns an error if no session data is found. */ - logInTwoFactor: ( - twoFactor: TokenTwoFactorRequest, - // TODO: PM-15162 - deprecate captchaResponse - captchaResponse: string, - ) => Promise; + logInTwoFactor: (twoFactor: TokenTwoFactorRequest) => Promise; /** * Creates a master key from the provided master password and email. */ diff --git a/libs/auth/src/common/login-strategies/auth-request-login.strategy.ts b/libs/auth/src/common/login-strategies/auth-request-login.strategy.ts index 3d91adf35cf..8581ca74465 100644 --- a/libs/auth/src/common/login-strategies/auth-request-login.strategy.ts +++ b/libs/auth/src/common/login-strategies/auth-request-login.strategy.ts @@ -17,7 +17,6 @@ import { LoginStrategy, LoginStrategyData } from "./login.strategy"; export class AuthRequestLoginStrategyData implements LoginStrategyData { tokenRequest: PasswordTokenRequest; - captchaBypassToken: string; authRequestCredentials: AuthRequestLoginCredentials; static fromJSON(obj: Jsonify): AuthRequestLoginStrategyData { @@ -54,7 +53,6 @@ export class AuthRequestLoginStrategy extends LoginStrategy { data.tokenRequest = new PasswordTokenRequest( credentials.email, credentials.accessCode, - null, await this.buildTwoFactor(credentials.twoFactor, credentials.email), await this.buildDeviceRequest(), ); @@ -66,12 +64,8 @@ export class AuthRequestLoginStrategy extends LoginStrategy { return authResult; } - override async logInTwoFactor( - twoFactor: TokenTwoFactorRequest, - captchaResponse: string, - ): Promise { + override async logInTwoFactor(twoFactor: TokenTwoFactorRequest): Promise { const data = this.cache.value; - data.tokenRequest.captchaResponse = captchaResponse ?? data.captchaBypassToken; this.cache.next(data); return super.logInTwoFactor(twoFactor); diff --git a/libs/auth/src/common/login-strategies/login.strategy.spec.ts b/libs/auth/src/common/login-strategies/login.strategy.spec.ts index 5a5a9dc2575..a0ccba649b6 100644 --- a/libs/auth/src/common/login-strategies/login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/login.strategy.spec.ts @@ -11,7 +11,6 @@ import { AuthResult } from "@bitwarden/common/auth/models/domain/auth-result"; import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason"; import { PasswordTokenRequest } from "@bitwarden/common/auth/models/request/identity-token/password-token.request"; import { TokenTwoFactorRequest } from "@bitwarden/common/auth/models/request/identity-token/token-two-factor.request"; -import { IdentityCaptchaResponse } from "@bitwarden/common/auth/models/response/identity-captcha.response"; import { IdentityDeviceVerificationResponse } from "@bitwarden/common/auth/models/response/identity-device-verification.response"; import { IdentityTokenResponse } from "@bitwarden/common/auth/models/response/identity-token.response"; import { IdentityTwoFactorResponse } from "@bitwarden/common/auth/models/response/identity-two-factor.response"; @@ -59,7 +58,6 @@ const accessToken = "ACCESS_TOKEN"; const refreshToken = "REFRESH_TOKEN"; const userKey = "USER_KEY"; const privateKey = "PRIVATE_KEY"; -const captchaSiteKey = "CAPTCHA_SITE_KEY"; const kdf = 0; const kdfIterations = 10000; const userId = Utils.newGuid() as UserId; @@ -298,7 +296,6 @@ describe("LoginStrategy", () => { expected.userId = userId; expected.resetMasterPassword = true; expected.twoFactorProviders = null; - expected.captchaSiteKey = ""; expect(result).toEqual(expected); }); @@ -314,7 +311,6 @@ describe("LoginStrategy", () => { expected.userId = userId; expected.resetMasterPassword = false; expected.twoFactorProviders = null; - expected.captchaSiteKey = ""; expect(result).toEqual(expected); expect(masterPasswordService.mock.setForceSetPasswordReason).toHaveBeenCalledWith( @@ -323,28 +319,6 @@ describe("LoginStrategy", () => { ); }); - it("rejects login if CAPTCHA is required", async () => { - // Sample CAPTCHA response - const tokenResponse = new IdentityCaptchaResponse({ - error: "invalid_grant", - error_description: "Captcha required.", - HCaptcha_SiteKey: captchaSiteKey, - }); - - apiService.postIdentityToken.mockResolvedValue(tokenResponse); - masterPasswordService.masterKeySubject.next(masterKey); - masterPasswordService.mock.decryptUserKeyWithMasterKey.mockResolvedValue(userKey); - - const result = await passwordLoginStrategy.logIn(credentials); - - expect(stateService.addAccount).not.toHaveBeenCalled(); - expect(messagingService.send).not.toHaveBeenCalled(); - - const expected = new AuthResult(); - expected.captchaSiteKey = captchaSiteKey; - expect(result).toEqual(expected); - }); - it("makes a new public and private key for an old account", async () => { const tokenResponse = identityTokenResponseFactory(); tokenResponse.privateKey = null; @@ -492,7 +466,6 @@ describe("LoginStrategy", () => { cache.tokenRequest = new PasswordTokenRequest( email, masterPasswordHash, - "", new TokenTwoFactorRequest(), ); @@ -524,7 +497,6 @@ describe("LoginStrategy", () => { await passwordLoginStrategy.logInTwoFactor( new TokenTwoFactorRequest(twoFactorProviderType, twoFactorToken, twoFactorRemember), - "", ); expect(apiService.postIdentityToken).toHaveBeenCalledWith( @@ -541,13 +513,11 @@ describe("LoginStrategy", () => { describe("Device verification", () => { it("processes device verification response", async () => { - const captchaToken = "test-captcha-token"; const deviceVerificationResponse = new IdentityDeviceVerificationResponse({ error: "invalid_grant", error_description: "Device verification required.", email: "test@bitwarden.com", deviceVerificationRequest: true, - captchaToken: captchaToken, }); apiService.postIdentityToken.mockResolvedValue(deviceVerificationResponse); @@ -556,7 +526,6 @@ describe("LoginStrategy", () => { cache.tokenRequest = new PasswordTokenRequest( email, masterPasswordHash, - "", new TokenTwoFactorRequest(), ); diff --git a/libs/auth/src/common/login-strategies/login.strategy.ts b/libs/auth/src/common/login-strategies/login.strategy.ts index e252d50a5ab..6e66d65b654 100644 --- a/libs/auth/src/common/login-strategies/login.strategy.ts +++ b/libs/auth/src/common/login-strategies/login.strategy.ts @@ -13,7 +13,6 @@ import { SsoTokenRequest } from "@bitwarden/common/auth/models/request/identity- import { TokenTwoFactorRequest } from "@bitwarden/common/auth/models/request/identity-token/token-two-factor.request"; import { UserApiTokenRequest } from "@bitwarden/common/auth/models/request/identity-token/user-api-token.request"; import { WebAuthnLoginTokenRequest } from "@bitwarden/common/auth/models/request/identity-token/webauthn-login-token.request"; -import { IdentityCaptchaResponse } from "@bitwarden/common/auth/models/response/identity-captcha.response"; import { IdentityDeviceVerificationResponse } from "@bitwarden/common/auth/models/response/identity-device-verification.response"; import { IdentityTokenResponse } from "@bitwarden/common/auth/models/response/identity-token.response"; import { IdentityTwoFactorResponse } from "@bitwarden/common/auth/models/response/identity-two-factor.response"; @@ -56,7 +55,6 @@ import { CacheData } from "../services/login-strategies/login-strategy.state"; type IdentityResponse = | IdentityTokenResponse | IdentityTwoFactorResponse - | IdentityCaptchaResponse | IdentityDeviceVerificationResponse; export abstract class LoginStrategyData { @@ -66,7 +64,6 @@ export abstract class LoginStrategyData { | SsoTokenRequest | WebAuthnLoginTokenRequest | undefined; - captchaBypassToken?: string; /** User's entered email obtained pre-login. */ abstract userEnteredEmail?: string; @@ -108,10 +105,7 @@ export abstract class LoginStrategy { | WebAuthnLoginCredentials, ): Promise; - async logInTwoFactor( - twoFactor: TokenTwoFactorRequest, - captchaResponse: string | null = null, - ): Promise { + async logInTwoFactor(twoFactor: TokenTwoFactorRequest): Promise { const data = this.cache.value; if (!data.tokenRequest) { throw new Error("Token request is undefined"); @@ -133,8 +127,6 @@ export abstract class LoginStrategy { if (response instanceof IdentityTwoFactorResponse) { return [await this.processTwoFactorResponse(response), response]; - } else if (response instanceof IdentityCaptchaResponse) { - return [await this.processCaptchaResponse(response), response]; } else if (response instanceof IdentityTokenResponse) { return [await this.processTokenResponse(response), response]; } else if (response instanceof IdentityDeviceVerificationResponse) { @@ -362,7 +354,6 @@ export abstract class LoginStrategy { result.twoFactorProviders = response.twoFactorProviders2; await this.twoFactorService.setProviders(response); - this.cache.next({ ...this.cache.value, captchaBypassToken: response.captchaToken ?? null }); result.ssoEmail2FaSessionToken = response.ssoEmail2faSessionToken; result.email = response.email ?? ""; @@ -379,12 +370,6 @@ export abstract class LoginStrategy { } } - private async processCaptchaResponse(response: IdentityCaptchaResponse): Promise { - const result = new AuthResult(); - result.captchaSiteKey = response.siteKey; - return result; - } - /** * Verifies that the active account is set after initialization. * Note: In browser there is a slight delay between when active account emits in background, @@ -407,7 +392,7 @@ export abstract class LoginStrategy { /** * Handles the response from the server when a device verification is required. - * It sets the requiresDeviceVerification flag to true and caches the captcha token if it came back. + * It sets the requiresDeviceVerification flag to true. * * @param {IdentityDeviceVerificationResponse} response - The response from the server indicating that device verification is required. * @returns {Promise} - A promise that resolves to an AuthResult object @@ -417,9 +402,6 @@ export abstract class LoginStrategy { ): Promise { const result = new AuthResult(); result.requiresDeviceVerification = true; - - // Extend cached data with captcha bypass token if it came back. - this.cache.next({ ...this.cache.value, captchaBypassToken: response.captchaToken ?? null }); return result; } } diff --git a/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts index 2923908fb7b..38829974c4e 100644 --- a/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts @@ -184,7 +184,6 @@ describe("PasswordLoginStrategy", () => { provider: null, token: null, }), - captchaResponse: undefined, }), ); }); @@ -260,14 +259,11 @@ describe("PasswordLoginStrategy", () => { apiService.postIdentityToken.mockResolvedValueOnce( identityTokenResponseFactory(masterPasswordPolicy), ); - await passwordLoginStrategy.logInTwoFactor( - { - provider: TwoFactorProviderType.Authenticator, - token: "123456", - remember: false, - }, - "", - ); + await passwordLoginStrategy.logInTwoFactor({ + provider: TwoFactorProviderType.Authenticator, + token: "123456", + remember: false, + }); // Second login attempt should save the force password reset options expect(masterPasswordService.mock.setForceSetPasswordReason).toHaveBeenCalledWith( diff --git a/libs/auth/src/common/login-strategies/password-login.strategy.ts b/libs/auth/src/common/login-strategies/password-login.strategy.ts index 6af9d8dbb6b..7671269a85f 100644 --- a/libs/auth/src/common/login-strategies/password-login.strategy.ts +++ b/libs/auth/src/common/login-strategies/password-login.strategy.ts @@ -9,7 +9,6 @@ import { AuthResult } from "@bitwarden/common/auth/models/domain/auth-result"; import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason"; import { PasswordTokenRequest } from "@bitwarden/common/auth/models/request/identity-token/password-token.request"; import { TokenTwoFactorRequest } from "@bitwarden/common/auth/models/request/identity-token/token-two-factor.request"; -import { IdentityCaptchaResponse } from "@bitwarden/common/auth/models/response/identity-captcha.response"; import { IdentityDeviceVerificationResponse } from "@bitwarden/common/auth/models/response/identity-device-verification.response"; import { IdentityTokenResponse } from "@bitwarden/common/auth/models/response/identity-token.response"; import { IdentityTwoFactorResponse } from "@bitwarden/common/auth/models/response/identity-two-factor.response"; @@ -30,8 +29,6 @@ export class PasswordLoginStrategyData implements LoginStrategyData { /** User's entered email obtained pre-login. Always present in MP login. */ userEnteredEmail: string; - /** If 2fa is required, token is returned to bypass captcha */ - captchaBypassToken?: string; /** The local version of the user's master key hash */ localMasterKeyHash: string; /** The user's master key */ @@ -79,7 +76,7 @@ export class PasswordLoginStrategy extends LoginStrategy { } override async logIn(credentials: PasswordLoginCredentials) { - const { email, masterPassword, captchaToken, twoFactor } = credentials; + const { email, masterPassword, twoFactor } = credentials; const data = new PasswordLoginStrategyData(); data.masterKey = await this.loginStrategyService.makePreloginKey(masterPassword, email); @@ -96,7 +93,6 @@ export class PasswordLoginStrategy extends LoginStrategy { data.tokenRequest = new PasswordTokenRequest( email, serverMasterKeyHash, - captchaToken, await this.buildTwoFactor(twoFactor, email), await this.buildDeviceRequest(), ); @@ -105,23 +101,12 @@ export class PasswordLoginStrategy extends LoginStrategy { const [authResult, identityResponse] = await this.startLogIn(); - if (identityResponse instanceof IdentityCaptchaResponse) { - return authResult; - } - await this.evaluateMasterPasswordIfRequired(identityResponse, credentials, authResult); return authResult; } - override async logInTwoFactor( - twoFactor: TokenTwoFactorRequest, - captchaResponse: string, - ): Promise { - const data = this.cache.value; - data.tokenRequest.captchaResponse = captchaResponse ?? data.captchaBypassToken; - this.cache.next(data); - + override async logInTwoFactor(twoFactor: TokenTwoFactorRequest): Promise { const result = await super.logInTwoFactor(twoFactor); return result; diff --git a/libs/auth/src/common/login-strategies/sso-login.strategy.ts b/libs/auth/src/common/login-strategies/sso-login.strategy.ts index d81284a960e..92add18059c 100644 --- a/libs/auth/src/common/login-strategies/sso-login.strategy.ts +++ b/libs/auth/src/common/login-strategies/sso-login.strategy.ts @@ -22,7 +22,6 @@ import { CacheData } from "../services/login-strategies/login-strategy.state"; import { LoginStrategyData, LoginStrategy } from "./login.strategy"; export class SsoLoginStrategyData implements LoginStrategyData { - captchaBypassToken: string; tokenRequest: SsoTokenRequest; /** * User's entered email obtained pre-login. Present in most SSO flows, but not CLI + SSO Flow. diff --git a/libs/auth/src/common/login-strategies/user-api-login.strategy.ts b/libs/auth/src/common/login-strategies/user-api-login.strategy.ts index 32cd5ceaf40..7e7ecee0385 100644 --- a/libs/auth/src/common/login-strategies/user-api-login.strategy.ts +++ b/libs/auth/src/common/login-strategies/user-api-login.strategy.ts @@ -16,7 +16,6 @@ import { LoginStrategy, LoginStrategyData } from "./login.strategy"; export class UserApiLoginStrategyData implements LoginStrategyData { tokenRequest: UserApiTokenRequest; - captchaBypassToken: string; static fromJSON(obj: Jsonify): UserApiLoginStrategyData { return Object.assign(new UserApiLoginStrategyData(), obj, { diff --git a/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts index fb4cbd55ad9..e3c2d2da27f 100644 --- a/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts @@ -208,11 +208,9 @@ describe("WebAuthnLoginStrategy", () => { expect(authResult).toBeInstanceOf(AuthResult); expect(authResult).toMatchObject({ - captchaSiteKey: "", resetMasterPassword: false, twoFactorProviders: null, requiresTwoFactor: false, - requiresCaptcha: false, }); }); diff --git a/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts b/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts index 182d44195c7..1d817c57009 100644 --- a/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts +++ b/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts @@ -17,7 +17,6 @@ import { LoginStrategy, LoginStrategyData } from "./login.strategy"; export class WebAuthnLoginStrategyData implements LoginStrategyData { tokenRequest: WebAuthnLoginTokenRequest; - captchaBypassToken?: string; credentials: WebAuthnLoginCredentials; static fromJSON(obj: Jsonify): WebAuthnLoginStrategyData { diff --git a/libs/auth/src/common/models/domain/login-credentials.ts b/libs/auth/src/common/models/domain/login-credentials.ts index cc21e5b2505..bce8ce54de5 100644 --- a/libs/auth/src/common/models/domain/login-credentials.ts +++ b/libs/auth/src/common/models/domain/login-credentials.ts @@ -14,8 +14,6 @@ export class PasswordLoginCredentials { constructor( public email: string, public masterPassword: string, - // TODO: PM-15162 - captcha is deprecated as part of UI refresh work - public captchaToken?: string, public twoFactor?: TokenTwoFactorRequest, ) {} } diff --git a/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts b/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts index 1dc05cafa00..981f5592621 100644 --- a/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts +++ b/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts @@ -248,7 +248,7 @@ describe("LoginStrategyService", () => { premium: false, }); - const result = await sut.logInTwoFactor(twoFactorToken, "CAPTCHA"); + const result = await sut.logInTwoFactor(twoFactorToken); expect(result).toBeInstanceOf(AuthResult); }); @@ -285,7 +285,7 @@ describe("LoginStrategyService", () => { true, ); - await expect(sut.logInTwoFactor(twoFactorToken, "CAPTCHA")).rejects.toThrow(); + await expect(sut.logInTwoFactor(twoFactorToken)).rejects.toThrow(); }); it("throw error on too low kdf config", async () => { diff --git a/libs/auth/src/common/services/login-strategies/login-strategy.service.ts b/libs/auth/src/common/services/login-strategies/login-strategy.service.ts index 2adea85a9ec..a9b7ef250bc 100644 --- a/libs/auth/src/common/services/login-strategies/login-strategy.service.ts +++ b/libs/auth/src/common/services/login-strategies/login-strategy.service.ts @@ -242,10 +242,7 @@ export class LoginStrategyService implements LoginStrategyServiceAbstraction { return result; } - async logInTwoFactor( - twoFactor: TokenTwoFactorRequest, - captchaResponse: string, - ): Promise { + async logInTwoFactor(twoFactor: TokenTwoFactorRequest): Promise { if (!(await this.isSessionValid())) { throw new Error(this.i18nService.t("sessionTimeout")); } @@ -256,10 +253,10 @@ export class LoginStrategyService implements LoginStrategyServiceAbstraction { } try { - const result = await strategy.logInTwoFactor(twoFactor, captchaResponse); + const result = await strategy.logInTwoFactor(twoFactor); // Only clear cache if 2FA token has been accepted, otherwise we need to be able to try again - if (result != null && !result.requiresTwoFactor && !result.requiresCaptcha) { + if (result != null && !result.requiresTwoFactor) { await this.clearCache(); } return result; diff --git a/libs/auth/src/common/services/login-strategies/login-strategy.state.spec.ts b/libs/auth/src/common/services/login-strategies/login-strategy.state.spec.ts index ea9d1f80e3c..32c5fdcc4d5 100644 --- a/libs/auth/src/common/services/login-strategies/login-strategy.state.spec.ts +++ b/libs/auth/src/common/services/login-strategies/login-strategy.state.spec.ts @@ -47,7 +47,6 @@ describe("LOGIN_STRATEGY_CACHE_KEY", () => { actual.password.tokenRequest = new PasswordTokenRequest( "EMAIL", "LOCAL_PASSWORD_HASH", - "CAPTCHA_TOKEN", twoFactorRequest, deviceRequest, ); @@ -116,7 +115,7 @@ describe("LOGIN_STRATEGY_CACHE_KEY", () => { deviceResponse, deviceRequest, ); - actual.webAuthn.captchaBypassToken = "CAPTCHA_BYPASS_TOKEN"; + actual.webAuthn.tokenRequest.setTwoFactor( new TokenTwoFactorRequest(TwoFactorProviderType.Email, "TOKEN", false), ); diff --git a/libs/common/src/abstractions/api.service.ts b/libs/common/src/abstractions/api.service.ts index dcd326b2812..1e13a3064f4 100644 --- a/libs/common/src/abstractions/api.service.ts +++ b/libs/common/src/abstractions/api.service.ts @@ -61,13 +61,11 @@ import { UpdateTwoFactorYubikeyOtpRequest } from "../auth/models/request/update- import { ApiKeyResponse } from "../auth/models/response/api-key.response"; import { AuthRequestResponse } from "../auth/models/response/auth-request.response"; import { DeviceVerificationResponse } from "../auth/models/response/device-verification.response"; -import { IdentityCaptchaResponse } from "../auth/models/response/identity-captcha.response"; import { IdentityDeviceVerificationResponse } from "../auth/models/response/identity-device-verification.response"; import { IdentityTokenResponse } from "../auth/models/response/identity-token.response"; import { IdentityTwoFactorResponse } from "../auth/models/response/identity-two-factor.response"; import { KeyConnectorUserKeyResponse } from "../auth/models/response/key-connector-user-key.response"; import { PreloginResponse } from "../auth/models/response/prelogin.response"; -import { RegisterResponse } from "../auth/models/response/register.response"; import { SsoPreValidateResponse } from "../auth/models/response/sso-pre-validate.response"; import { TwoFactorAuthenticatorResponse } from "../auth/models/response/two-factor-authenticator.response"; import { TwoFactorDuoResponse } from "../auth/models/response/two-factor-duo.response"; @@ -95,7 +93,6 @@ import { EventRequest } from "../models/request/event.request"; import { KdfRequest } from "../models/request/kdf.request"; import { KeysRequest } from "../models/request/keys.request"; import { PreloginRequest } from "../models/request/prelogin.request"; -import { RegisterRequest } from "../models/request/register.request"; import { StorageRequest } from "../models/request/storage.request"; import { UpdateAvatarRequest } from "../models/request/update-avatar.request"; import { UpdateDomainsRequest } from "../models/request/update-domains.request"; @@ -147,10 +144,7 @@ export abstract class ApiService { | UserApiTokenRequest | WebAuthnLoginTokenRequest, ) => Promise< - | IdentityTokenResponse - | IdentityTwoFactorResponse - | IdentityCaptchaResponse - | IdentityDeviceVerificationResponse + IdentityTokenResponse | IdentityTwoFactorResponse | IdentityDeviceVerificationResponse >; refreshIdentityToken: () => Promise; @@ -167,7 +161,6 @@ export abstract class ApiService { postSecurityStamp: (request: SecretVerificationRequest) => Promise; getAccountRevisionDate: () => Promise; postPasswordHint: (request: PasswordHintRequest) => Promise; - postRegister: (request: RegisterRequest) => Promise; postPremium: (data: FormData) => Promise; postReinstatePremium: () => Promise; postAccountStorage: (request: StorageRequest) => Promise; diff --git a/libs/common/src/auth/abstractions/account-api.service.ts b/libs/common/src/auth/abstractions/account-api.service.ts index 61fdd4f9d68..f1773e33e6a 100644 --- a/libs/common/src/auth/abstractions/account-api.service.ts +++ b/libs/common/src/auth/abstractions/account-api.service.ts @@ -47,10 +47,9 @@ export abstract class AccountApiService { * @param request - The request object containing the user's email verification token, * the email, hashed MP, newly created user key, and new asymmetric user key pair along * with the KDF information used during the process. - * @returns A promise that resolves to a string captcha bypass token when the - * registration process is successfully completed. + * @returns A promise that resolves when the registration process is successfully completed. */ - abstract registerFinish(request: RegisterFinishRequest): Promise; + abstract registerFinish(request: RegisterFinishRequest): Promise; /** * Sets the [dbo].[User].[VerifyDevices] flag to true or false. diff --git a/libs/common/src/auth/captcha-iframe.ts b/libs/common/src/auth/captcha-iframe.ts deleted file mode 100644 index 94859003e16..00000000000 --- a/libs/common/src/auth/captcha-iframe.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { I18nService } from "../platform/abstractions/i18n.service"; - -import { IFrameComponent } from "./iframe-component"; - -// TODO: PM-15162 - captcha is deprecated as part of UI refresh work -export class CaptchaIFrame extends IFrameComponent { - constructor( - win: Window, - webVaultUrl: string, - private i18nService: I18nService, - successCallback: (message: string) => any, - errorCallback: (message: string) => any, - infoCallback: (message: string) => any, - ) { - super( - win, - webVaultUrl, - "captcha-connector.html", - "hcaptcha_iframe", - successCallback, - errorCallback, - (message: string) => { - const parsedMessage = JSON.parse(message); - if (typeof parsedMessage !== "string") { - this.iframe.height = parsedMessage.height.toString(); - this.iframe.width = parsedMessage.width.toString(); - } else { - infoCallback(parsedMessage); - } - }, - ); - } - - init(siteKey: string): void { - super.initComponent( - this.createParams({ siteKey: siteKey, locale: this.i18nService.translationLocale }, 1), - ); - } -} diff --git a/libs/common/src/auth/iframe-component.ts b/libs/common/src/auth/iframe-component.ts deleted file mode 100644 index 814dc9642da..00000000000 --- a/libs/common/src/auth/iframe-component.ts +++ /dev/null @@ -1,96 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -export abstract class IFrameComponent { - iframe: HTMLIFrameElement; - private connectorLink: HTMLAnchorElement; - private parseFunction = this.parseMessage.bind(this); - - constructor( - private win: Window, - protected webVaultUrl: string, - private path: string, - private iframeId: string, - public successCallback?: (message: string) => any, - public errorCallback?: (message: string) => any, - public infoCallback?: (message: string) => any, - ) { - this.connectorLink = win.document.createElement("a"); - } - - stop() { - this.sendMessage("stop"); - } - - start() { - this.sendMessage("start"); - } - - sendMessage(message: any) { - if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) { - return; - } - - this.iframe.contentWindow.postMessage(message, this.iframe.src); - } - - base64Encode(str: string): string { - return btoa( - encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => { - return String.fromCharCode(("0x" + p1) as any); - }), - ); - } - - cleanup() { - this.win.removeEventListener("message", this.parseFunction, false); - } - - protected createParams(data: any, version: number) { - return new URLSearchParams({ - data: this.base64Encode(JSON.stringify(data)), - parent: encodeURIComponent(this.win.document.location.href), - v: version.toString(), - }); - } - - protected initComponent(params: URLSearchParams): void { - this.connectorLink.href = `${this.webVaultUrl}/${this.path}?${params}`; - this.iframe = this.win.document.getElementById(this.iframeId) as HTMLIFrameElement; - this.iframe.src = this.connectorLink.href; - - this.win.addEventListener("message", this.parseFunction, false); - } - - private parseMessage(event: MessageEvent) { - if (!this.validMessage(event)) { - return; - } - - const parts: string[] = event.data.split("|"); - if (parts[0] === "success" && this.successCallback) { - this.successCallback(parts[1]); - } else if (parts[0] === "error" && this.errorCallback) { - this.errorCallback(parts[1]); - } else if (parts[0] === "info" && this.infoCallback) { - this.infoCallback(parts[1]); - } - } - - private validMessage(event: MessageEvent) { - if ( - event.origin == null || - event.origin === "" || - event.origin !== (this.connectorLink as any).origin || - event.data == null || - typeof event.data !== "string" - ) { - return false; - } - - return ( - event.data.indexOf("success|") === 0 || - event.data.indexOf("error|") === 0 || - event.data.indexOf("info|") === 0 - ); - } -} diff --git a/libs/common/src/auth/models/domain/auth-result.ts b/libs/common/src/auth/models/domain/auth-result.ts index 5177363ac89..a61a35eeb1d 100644 --- a/libs/common/src/auth/models/domain/auth-result.ts +++ b/libs/common/src/auth/models/domain/auth-result.ts @@ -1,12 +1,10 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { Utils } from "../../../platform/misc/utils"; import { UserId } from "../../../types/guid"; import { TwoFactorProviderType } from "../../enums/two-factor-provider-type"; export class AuthResult { userId: UserId; - captchaSiteKey = ""; // TODO: PM-3287 - Remove this after 3 releases of backwards compatibility. - Target release 2023.12 for removal /** * @deprecated @@ -21,10 +19,6 @@ export class AuthResult { requiresEncryptionKeyMigration: boolean; requiresDeviceVerification: boolean; - get requiresCaptcha() { - return !Utils.isNullOrWhitespace(this.captchaSiteKey); - } - get requiresTwoFactor() { return this.twoFactorProviders != null; } diff --git a/libs/common/src/auth/models/request/captcha-protected.request.ts b/libs/common/src/auth/models/request/captcha-protected.request.ts deleted file mode 100644 index f15f4efebeb..00000000000 --- a/libs/common/src/auth/models/request/captcha-protected.request.ts +++ /dev/null @@ -1,5 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -export abstract class CaptchaProtectedRequest { - captchaResponse: string = null; -} diff --git a/libs/common/src/auth/models/request/identity-token/password-token.request.ts b/libs/common/src/auth/models/request/identity-token/password-token.request.ts index 3fe466e143b..4f2313473da 100644 --- a/libs/common/src/auth/models/request/identity-token/password-token.request.ts +++ b/libs/common/src/auth/models/request/identity-token/password-token.request.ts @@ -1,16 +1,14 @@ import { ClientType } from "../../../../enums"; import { Utils } from "../../../../platform/misc/utils"; -import { CaptchaProtectedRequest } from "../captcha-protected.request"; import { DeviceRequest } from "./device.request"; import { TokenTwoFactorRequest } from "./token-two-factor.request"; import { TokenRequest } from "./token.request"; -export class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest { +export class PasswordTokenRequest extends TokenRequest { constructor( public email: string, public masterPasswordHash: string, - public captchaResponse: string, protected twoFactor: TokenTwoFactorRequest, device?: DeviceRequest, public newDeviceOtp?: string, @@ -25,10 +23,6 @@ export class PasswordTokenRequest extends TokenRequest implements CaptchaProtect obj.username = this.email; obj.password = this.masterPasswordHash; - if (this.captchaResponse != null) { - obj.captchaResponse = this.captchaResponse; - } - if (this.newDeviceOtp) { obj.newDeviceOtp = this.newDeviceOtp; } diff --git a/libs/common/src/auth/models/response/captcha-protected.response.ts b/libs/common/src/auth/models/response/captcha-protected.response.ts deleted file mode 100644 index 3f34b71479d..00000000000 --- a/libs/common/src/auth/models/response/captcha-protected.response.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface ICaptchaProtectedResponse { - captchaBypassToken: string; -} diff --git a/libs/common/src/auth/models/response/identity-captcha.response.ts b/libs/common/src/auth/models/response/identity-captcha.response.ts deleted file mode 100644 index f5ec727d901..00000000000 --- a/libs/common/src/auth/models/response/identity-captcha.response.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { BaseResponse } from "../../../models/response/base.response"; - -export class IdentityCaptchaResponse extends BaseResponse { - siteKey: string; - - constructor(response: any) { - super(response); - this.siteKey = this.getResponseProperty("HCaptcha_SiteKey"); - } -} diff --git a/libs/common/src/auth/models/response/identity-device-verification.response.ts b/libs/common/src/auth/models/response/identity-device-verification.response.ts index b45f47e99e1..ac2ab62c474 100644 --- a/libs/common/src/auth/models/response/identity-device-verification.response.ts +++ b/libs/common/src/auth/models/response/identity-device-verification.response.ts @@ -2,12 +2,9 @@ import { BaseResponse } from "@bitwarden/common/models/response/base.response"; export class IdentityDeviceVerificationResponse extends BaseResponse { deviceVerified: boolean; - captchaToken: string; constructor(response: any) { super(response); this.deviceVerified = this.getResponseProperty("DeviceVerified") ?? false; - - this.captchaToken = this.getResponseProperty("CaptchaBypassToken"); } } diff --git a/libs/common/src/auth/models/response/identity-two-factor.response.ts b/libs/common/src/auth/models/response/identity-two-factor.response.ts index dce64e8ef3e..b52fbcb8771 100644 --- a/libs/common/src/auth/models/response/identity-two-factor.response.ts +++ b/libs/common/src/auth/models/response/identity-two-factor.response.ts @@ -8,14 +8,12 @@ export class IdentityTwoFactorResponse extends BaseResponse { twoFactorProviders: TwoFactorProviderType[]; // a map of two-factor providers to necessary data for completion twoFactorProviders2: Record>; - captchaToken: string; ssoEmail2faSessionToken: string; email?: string; masterPasswordPolicy?: MasterPasswordPolicyResponse; constructor(response: any) { super(response); - this.captchaToken = this.getResponseProperty("CaptchaBypassToken"); this.twoFactorProviders = this.getResponseProperty("TwoFactorProviders"); this.twoFactorProviders2 = this.getResponseProperty("TwoFactorProviders2"); this.masterPasswordPolicy = new MasterPasswordPolicyResponse( diff --git a/libs/common/src/auth/models/response/register.response.ts b/libs/common/src/auth/models/response/register.response.ts deleted file mode 100644 index 65f6ba62729..00000000000 --- a/libs/common/src/auth/models/response/register.response.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { BaseResponse } from "../../../models/response/base.response"; - -import { ICaptchaProtectedResponse } from "./captcha-protected.response"; - -export class RegisterResponse extends BaseResponse implements ICaptchaProtectedResponse { - captchaBypassToken: string; - - constructor(response: any) { - super(response); - this.captchaBypassToken = this.getResponseProperty("CaptchaBypassToken"); - } -} diff --git a/libs/common/src/auth/services/account-api.service.ts b/libs/common/src/auth/services/account-api.service.ts index 0347694c465..923153a0a0b 100644 --- a/libs/common/src/auth/services/account-api.service.ts +++ b/libs/common/src/auth/services/account-api.service.ts @@ -84,7 +84,7 @@ export class AccountApiServiceImplementation implements AccountApiService { } } - async registerFinish(request: RegisterFinishRequest): Promise { + async registerFinish(request: RegisterFinishRequest): Promise { const env = await firstValueFrom(this.environmentService.environment$); try { diff --git a/libs/common/src/models/request/register.request.ts b/libs/common/src/models/request/register.request.ts deleted file mode 100644 index 4f11aadd49c..00000000000 --- a/libs/common/src/models/request/register.request.ts +++ /dev/null @@ -1,31 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { KdfType } from "@bitwarden/key-management"; - -import { CaptchaProtectedRequest } from "../../auth/models/request/captcha-protected.request"; - -import { KeysRequest } from "./keys.request"; -import { ReferenceEventRequest } from "./reference-event.request"; - -export class RegisterRequest implements CaptchaProtectedRequest { - masterPasswordHint: string; - keys: KeysRequest; - token: string; - organizationUserId: string; - - constructor( - public email: string, - public name: string, - public masterPasswordHash: string, - masterPasswordHint: string, - public key: string, - public referenceData: ReferenceEventRequest, - public captchaResponse: string, - public kdf: KdfType, - public kdfIterations: number, - public kdfMemory?: number, - public kdfParallelism?: number, - ) { - this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null; - } -} diff --git a/libs/common/src/models/response/error.response.ts b/libs/common/src/models/response/error.response.ts index de88db04922..11dc7ec86de 100644 --- a/libs/common/src/models/response/error.response.ts +++ b/libs/common/src/models/response/error.response.ts @@ -1,15 +1,11 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { Utils } from "../../platform/misc/utils"; - import { BaseResponse } from "./base.response"; export class ErrorResponse extends BaseResponse { message: string; validationErrors: { [key: string]: string[] }; statusCode: number; - captchaRequired: boolean; - captchaSiteKey: string; constructor(response: any, status: number, identityResponse?: boolean) { super(response); @@ -28,8 +24,6 @@ export class ErrorResponse extends BaseResponse { } else if (errorModel) { this.message = this.getResponseProperty("Message", errorModel); this.validationErrors = this.getResponseProperty("ValidationErrors", errorModel); - this.captchaSiteKey = this.validationErrors?.HCaptcha_SiteKey?.[0]; - this.captchaRequired = !Utils.isNullOrWhitespace(this.captchaSiteKey); } this.statusCode = status; } diff --git a/libs/common/src/services/api.service.ts b/libs/common/src/services/api.service.ts index bd769407608..fb4d08db81c 100644 --- a/libs/common/src/services/api.service.ts +++ b/libs/common/src/services/api.service.ts @@ -69,13 +69,11 @@ import { UpdateTwoFactorYubikeyOtpRequest } from "../auth/models/request/update- import { ApiKeyResponse } from "../auth/models/response/api-key.response"; import { AuthRequestResponse } from "../auth/models/response/auth-request.response"; import { DeviceVerificationResponse } from "../auth/models/response/device-verification.response"; -import { IdentityCaptchaResponse } from "../auth/models/response/identity-captcha.response"; import { IdentityDeviceVerificationResponse } from "../auth/models/response/identity-device-verification.response"; import { IdentityTokenResponse } from "../auth/models/response/identity-token.response"; import { IdentityTwoFactorResponse } from "../auth/models/response/identity-two-factor.response"; import { KeyConnectorUserKeyResponse } from "../auth/models/response/key-connector-user-key.response"; import { PreloginResponse } from "../auth/models/response/prelogin.response"; -import { RegisterResponse } from "../auth/models/response/register.response"; import { SsoPreValidateResponse } from "../auth/models/response/sso-pre-validate.response"; import { TwoFactorAuthenticatorResponse } from "../auth/models/response/two-factor-authenticator.response"; import { TwoFactorDuoResponse } from "../auth/models/response/two-factor-duo.response"; @@ -106,7 +104,6 @@ import { EventRequest } from "../models/request/event.request"; import { KdfRequest } from "../models/request/kdf.request"; import { KeysRequest } from "../models/request/keys.request"; import { PreloginRequest } from "../models/request/prelogin.request"; -import { RegisterRequest } from "../models/request/register.request"; import { StorageRequest } from "../models/request/storage.request"; import { UpdateAvatarRequest } from "../models/request/update-avatar.request"; import { UpdateDomainsRequest } from "../models/request/update-domains.request"; @@ -200,10 +197,7 @@ export class ApiService implements ApiServiceAbstraction { | SsoTokenRequest | WebAuthnLoginTokenRequest, ): Promise< - | IdentityTokenResponse - | IdentityTwoFactorResponse - | IdentityCaptchaResponse - | IdentityDeviceVerificationResponse + IdentityTokenResponse | IdentityTwoFactorResponse | IdentityDeviceVerificationResponse > { const headers = new Headers({ "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", @@ -246,12 +240,6 @@ export class ApiService implements ApiServiceAbstraction { Object.keys(responseJson.TwoFactorProviders2).length ) { return new IdentityTwoFactorResponse(responseJson); - } else if ( - response.status === 400 && - responseJson.HCaptcha_SiteKey && - Object.keys(responseJson.HCaptcha_SiteKey).length - ) { - return new IdentityCaptchaResponse(responseJson); } else if ( response.status === 400 && responseJson?.ErrorModel?.Message === ApiService.NEW_DEVICE_VERIFICATION_REQUIRED_MESSAGE @@ -369,19 +357,6 @@ export class ApiService implements ApiServiceAbstraction { return this.send("POST", "/accounts/password-hint", request, false, false); } - async postRegister(request: RegisterRequest): Promise { - const env = await firstValueFrom(this.environmentService.environment$); - const r = await this.send( - "POST", - "/accounts/register", - request, - false, - true, - env.getIdentityUrl(), - ); - return new RegisterResponse(r); - } - async postPremium(data: FormData): Promise { const r = await this.send("POST", "/accounts/premium", data, true, true); return new PaymentResponse(r); From 73ded290e79ed6bb3881e2828d1d67c8a9bd6cf3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 10:58:17 -0400 Subject: [PATCH 12/36] [deps] UI Foundation: Update chromatic to v11.28.2 (#14492) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 908b9e29d8a..5151abf76b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -126,7 +126,7 @@ "babel-loader": "9.2.1", "base64-loader": "1.0.0", "browserslist": "4.23.2", - "chromatic": "11.25.2", + "chromatic": "11.28.2", "concurrently": "9.1.2", "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", @@ -15756,9 +15756,9 @@ } }, "node_modules/chromatic": { - "version": "11.25.2", - "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.25.2.tgz", - "integrity": "sha512-/9eQWn6BU1iFsop86t8Au21IksTRxwXAl7if8YHD05L2AbuMjClLWZo5cZojqrJHGKDhTqfrC2X2xE4uSm0iKw==", + "version": "11.28.2", + "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.28.2.tgz", + "integrity": "sha512-aCmUPcZUs4/p9zRZdMreOoO/5JqO2DiJC3md1/vRx8dlMRcmR/YI5ZbgXZcai2absVR+6hsXZ5XiPxV2sboTuQ==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index a485175997c..aeb0c8958d5 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "babel-loader": "9.2.1", "base64-loader": "1.0.0", "browserslist": "4.23.2", - "chromatic": "11.25.2", + "chromatic": "11.28.2", "concurrently": "9.1.2", "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", From 15cb060f0d1edd22a3cb30f8fe9ff02978446528 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 11:39:05 -0400 Subject: [PATCH 13/36] [deps] UI Foundation: Update autoprefixer to v10.4.21 (#14466) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 115 +++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 2 files changed, 94 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5151abf76b5..0db144090b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -122,7 +122,7 @@ "@webcomponents/custom-elements": "1.6.0", "@yao-pkg/pkg": "5.16.1", "angular-eslint": "18.4.3", - "autoprefixer": "10.4.20", + "autoprefixer": "10.4.21", "babel-loader": "9.2.1", "base64-loader": "1.0.0", "browserslist": "4.23.2", @@ -771,6 +771,44 @@ "node": ">= 14" } }, + "node_modules/@angular-devkit/build-angular/node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/babel-loader": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", @@ -789,6 +827,39 @@ "webpack": ">=5" } }, + "node_modules/@angular-devkit/build-angular/node_modules/browserslist": { + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -14247,9 +14318,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dev": true, "funding": [ { @@ -14267,11 +14338,11 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -14285,9 +14356,9 @@ } }, "node_modules/autoprefixer/node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -14305,10 +14376,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -15556,9 +15627,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001700", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", - "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", + "version": "1.0.30001717", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", + "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", "funding": [ { "type": "opencollective", @@ -17961,9 +18032,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.104", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.104.tgz", - "integrity": "sha512-Us9M2L4cO/zMBqVkJtnj353nQhMju9slHm62NprKTmdF3HH8wYOtNvDFq/JB2+ZRoGLzdvYDiATlMHs98XBM1g==", + "version": "1.5.151", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.151.tgz", + "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==", "license": "ISC" }, "node_modules/electron-updater": { @@ -35330,9 +35401,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "funding": [ { "type": "opencollective", diff --git a/package.json b/package.json index aeb0c8958d5..7c1873090c1 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@webcomponents/custom-elements": "1.6.0", "@yao-pkg/pkg": "5.16.1", "angular-eslint": "18.4.3", - "autoprefixer": "10.4.20", + "autoprefixer": "10.4.21", "babel-loader": "9.2.1", "base64-loader": "1.0.0", "browserslist": "4.23.2", From 1edca39fa231871350387a965b4d374cf375852e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 17:49:07 +0200 Subject: [PATCH 14/36] [deps] Platform: Update Rust crate sysinfo to 0.35.0 (#14265) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel García --- apps/desktop/desktop_native/Cargo.lock | 76 +++++++++----------------- apps/desktop/desktop_native/Cargo.toml | 2 +- 2 files changed, 26 insertions(+), 52 deletions(-) diff --git a/apps/desktop/desktop_native/Cargo.lock b/apps/desktop/desktop_native/Cargo.lock index df958a349fb..cfd29303510 100644 --- a/apps/desktop/desktop_native/Cargo.lock +++ b/apps/desktop/desktop_native/Cargo.lock @@ -713,25 +713,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -923,7 +904,7 @@ dependencies = [ "oo7", "pin-project", "pkcs8", - "rand 0.8.5", + "rand 0.9.1", "rsa", "russh-cryptovec", "scopeguard", @@ -1071,12 +1052,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "either" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" - [[package]] name = "embed_plist" version = "1.2.2" @@ -2059,6 +2034,15 @@ dependencies = [ "objc2-foundation", ] +[[package]] +name = "objc2-core-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +dependencies = [ + "bitflags", +] + [[package]] name = "objc2-core-image" version = "0.2.2" @@ -2089,6 +2073,16 @@ dependencies = [ "objc2", ] +[[package]] +name = "objc2-io-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" +dependencies = [ + "libc", + "objc2-core-foundation", +] + [[package]] name = "objc2-metal" version = "0.2.2" @@ -2525,26 +2519,6 @@ dependencies = [ "getrandom 0.3.1", ] -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "recvmsg" version = "1.0.0" @@ -3004,16 +2978,16 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.33.1" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +checksum = "b897c8ea620e181c7955369a31be5f48d9a9121cb59fd33ecef9ff2a34323422" dependencies = [ - "core-foundation-sys", "libc", "memchr", "ntapi", - "rayon", - "windows 0.57.0", + "objc2-core-foundation", + "objc2-io-kit", + "windows 0.61.1", ] [[package]] diff --git a/apps/desktop/desktop_native/Cargo.toml b/apps/desktop/desktop_native/Cargo.toml index 38a0b14893b..f613744f42a 100644 --- a/apps/desktop/desktop_native/Cargo.toml +++ b/apps/desktop/desktop_native/Cargo.toml @@ -49,7 +49,7 @@ sha2 = "=0.10.8" simplelog = "=0.12.2" ssh-encoding = "=0.2.0" ssh-key = {version = "=0.6.7", default-features = false } -sysinfo = "0.33.1" +sysinfo = "0.35.0" thiserror = "=1.0.69" tokio = "=1.43.1" tokio-stream = "=0.1.15" From a7efd2158ebd2032eea0dce8a1f5bc47c43e2165 Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Fri, 9 May 2025 08:52:54 -0700 Subject: [PATCH 15/36] [PM-18802] - Autofill Settings Nudges and Settings Badge (#14439) * autofill nudge * remove undismiss logic * revert change to popup view cache service * move browser autofill logic to platform. cleanup * fix test * adjustments to autofill nudges * add missing provider * updates to autofill nudges * fix date logic * change autofillBrowserSettingsService isBrowserAutofillSettingOverridden to function * fix up browser autofill overridden settings logic * remove check for privacy in isBrowserAutofillSettingOverridden --- apps/browser/src/_locales/en/messages.json | 18 ++++ .../popup/settings/autofill.component.html | 10 +++ .../popup/settings/autofill.component.ts | 84 +++++++++++-------- .../autofill-browser-settings.service.ts | 31 +++++++ .../src/platform/browser/browser-api.ts | 23 +++++ .../view-cache/popup-view-cache.service.ts | 2 +- .../popup/settings/settings-v2.component.html | 10 ++- .../popup/settings/settings-v2.component.ts | 39 ++++++++- .../spotlight/spotlight.component.html | 5 +- .../spotlight/spotlight.component.ts | 8 +- .../components/spotlight/spotlight.stories.ts | 20 ++--- .../autofill-nudge.service.ts | 47 +++++++++++ .../services/custom-nudges-services/index.ts | 1 + .../src/services/vault-nudges.service.spec.ts | 1 + .../src/services/vault-nudges.service.ts | 3 + 15 files changed, 240 insertions(+), 62 deletions(-) create mode 100644 apps/browser/src/autofill/services/autofill-browser-settings.service.ts create mode 100644 libs/vault/src/services/custom-nudges-services/autofill-nudge.service.ts diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 1df0bf96616..1c3214a6ef7 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -1589,6 +1589,24 @@ "autofillSuggestionsSectionTitle": { "message": "Autofill suggestions" }, + "autofillSpotlightTitle": { + "message": "Easily find autofill suggestions" + }, + "autofillSpotlightDesc": { + "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + }, + "turnOffBrowserAutofill": { + "message": "Turn off $BROWSER$ autofill", + "placeholders": { + "browser": { + "content": "$1", + "example": "Chrome" + } + } + }, + "turnOffAutofill": { + "message": "Turn off autofill" + }, "showInlineMenuLabel": { "message": "Show autofill suggestions on form fields" }, diff --git a/apps/browser/src/autofill/popup/settings/autofill.component.html b/apps/browser/src/autofill/popup/settings/autofill.component.html index 4fd85ddce33..264b04b039b 100644 --- a/apps/browser/src/autofill/popup/settings/autofill.component.html +++ b/apps/browser/src/autofill/popup/settings/autofill.component.html @@ -6,6 +6,16 @@
+
+ +

{{ "autofillSuggestionsSectionTitle" | i18n }}

diff --git a/apps/browser/src/autofill/popup/settings/autofill.component.ts b/apps/browser/src/autofill/popup/settings/autofill.component.ts index c30f150e71d..d63f9a4589d 100644 --- a/apps/browser/src/autofill/popup/settings/autofill.component.ts +++ b/apps/browser/src/autofill/popup/settings/autofill.component.ts @@ -11,9 +11,11 @@ import { FormControl, } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { firstValueFrom } from "rxjs"; +import { Observable, filter, firstValueFrom, map, switchMap } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { AutofillOverlayVisibility, BrowserClientVendors, @@ -53,7 +55,9 @@ import { SelectModule, TypographyModule, } from "@bitwarden/components"; +import { SpotlightComponent, VaultNudgesService, VaultNudgeType } from "@bitwarden/vault"; +import { AutofillBrowserSettingsService } from "../../../autofill/services/autofill-browser-settings.service"; import { BrowserApi } from "../../../platform/browser/browser-api"; import { PopOutComponent } from "../../../platform/popup/components/pop-out.component"; import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-header.component"; @@ -81,6 +85,7 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co SelectModule, TypographyModule, ReactiveFormsModule, + SpotlightComponent, ], }) export class AutofillComponent implements OnInit { @@ -100,6 +105,14 @@ export class AutofillComponent implements OnInit { protected browserClientIsUnknown: boolean; protected autofillOnPageLoadFromPolicy$ = this.autofillSettingsService.activateAutofillOnPageLoadFromPolicy$; + protected showSpotlightNudge$: Observable = this.accountService.activeAccount$.pipe( + filter((account): account is Account => account !== null), + switchMap((account) => + this.vaultNudgesService + .showNudge$(VaultNudgeType.AutofillNudge, account.id) + .pipe(map((nudgeStatus) => !nudgeStatus.hasSpotlightDismissed)), + ), + ); protected autofillOnPageLoadForm = new FormGroup({ autofillOnPageLoad: new FormControl(), @@ -142,6 +155,9 @@ export class AutofillComponent implements OnInit { private configService: ConfigService, private formBuilder: FormBuilder, private destroyRef: DestroyRef, + private vaultNudgesService: VaultNudgesService, + private accountService: AccountService, + private autofillBrowserSettingsService: AutofillBrowserSettingsService, ) { this.autofillOnPageLoadOptions = [ { name: this.i18nService.t("autoFillOnPageLoadYes"), value: true }, @@ -165,7 +181,7 @@ export class AutofillComponent implements OnInit { { name: i18nService.t("never"), value: UriMatchStrategy.Never }, ]; - this.browserClientVendor = this.getBrowserClientVendor(); + this.browserClientVendor = BrowserApi.getBrowserClientVendor(window); this.disablePasswordManagerURI = DisablePasswordManagerUris[this.browserClientVendor]; this.browserShortcutsURI = BrowserShortcutsUris[this.browserClientVendor]; this.browserClientIsUnknown = this.browserClientVendor === BrowserClientVendors.Unknown; @@ -173,7 +189,11 @@ export class AutofillComponent implements OnInit { async ngOnInit() { this.canOverrideBrowserAutofillSetting = !this.browserClientIsUnknown; - this.defaultBrowserAutofillDisabled = await this.browserAutofillSettingCurrentlyOverridden(); + + this.defaultBrowserAutofillDisabled = + await this.autofillBrowserSettingsService.isBrowserAutofillSettingOverridden( + this.browserClientVendor, + ); this.inlineMenuVisibility = await firstValueFrom( this.autofillSettingsService.inlineMenuVisibility$, @@ -308,6 +328,27 @@ export class AutofillComponent implements OnInit { ); } + get spotlightButtonIcon() { + if (this.browserClientVendor === BrowserClientVendors.Unknown) { + return "bwi-external-link"; + } + return null; + } + + get spotlightButtonText() { + if (this.browserClientVendor === BrowserClientVendors.Unknown) { + return this.i18nService.t("turnOffAutofill"); + } + return this.i18nService.t("turnOffBrowserAutofill", this.browserClientVendor); + } + + async dismissSpotlight() { + await this.vaultNudgesService.dismissNudge( + VaultNudgeType.AutofillNudge, + await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId)), + ); + } + async updateInlineMenuVisibility() { if (!this.enableInlineMenu) { this.enableInlineMenuOnIconSelect = false; @@ -346,26 +387,6 @@ export class AutofillComponent implements OnInit { } } - private getBrowserClientVendor(): BrowserClientVendor { - if (this.platformUtilsService.isChrome()) { - return BrowserClientVendors.Chrome; - } - - if (this.platformUtilsService.isOpera()) { - return BrowserClientVendors.Opera; - } - - if (this.platformUtilsService.isEdge()) { - return BrowserClientVendors.Edge; - } - - if (this.platformUtilsService.isVivaldi()) { - return BrowserClientVendors.Vivaldi; - } - - return BrowserClientVendors.Unknown; - } - protected async openURI(event: Event, uri: BrowserShortcutsUri | DisablePasswordManagerUri) { event.preventDefault(); @@ -422,7 +443,7 @@ export class AutofillComponent implements OnInit { if ( this.inlineMenuVisibility === AutofillOverlayVisibility.Off || !this.canOverrideBrowserAutofillSetting || - (await this.browserAutofillSettingCurrentlyOverridden()) + this.defaultBrowserAutofillDisabled ) { return; } @@ -460,6 +481,9 @@ export class AutofillComponent implements OnInit { } await BrowserApi.updateDefaultBrowserAutofillSettings(!this.defaultBrowserAutofillDisabled); + this.autofillBrowserSettingsService.setDefaultBrowserAutofillDisabled( + this.defaultBrowserAutofillDisabled, + ); } private handleOverrideDialogAccept = async () => { @@ -467,18 +491,6 @@ export class AutofillComponent implements OnInit { await this.updateDefaultBrowserAutofillDisabled(); }; - async browserAutofillSettingCurrentlyOverridden() { - if (!this.canOverrideBrowserAutofillSetting) { - return false; - } - - if (!(await this.privacyPermissionGranted())) { - return false; - } - - return await BrowserApi.browserAutofillSettingsOverridden(); - } - async privacyPermissionGranted(): Promise { return await BrowserApi.permissionsGranted(["privacy"]); } diff --git a/apps/browser/src/autofill/services/autofill-browser-settings.service.ts b/apps/browser/src/autofill/services/autofill-browser-settings.service.ts new file mode 100644 index 00000000000..ba59a655b77 --- /dev/null +++ b/apps/browser/src/autofill/services/autofill-browser-settings.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from "@angular/core"; +import { BehaviorSubject, Observable } from "rxjs"; + +import { BrowserClientVendors } from "@bitwarden/common/autofill/constants"; +import { BrowserClientVendor } from "@bitwarden/common/autofill/types"; + +import { BrowserApi } from "../../platform/browser/browser-api"; + +/** + * Service class for various Autofill-related browser API operations. + */ +@Injectable({ + providedIn: "root", +}) +export class AutofillBrowserSettingsService { + async isBrowserAutofillSettingOverridden(browserClient: BrowserClientVendor) { + return ( + browserClient !== BrowserClientVendors.Unknown && + (await BrowserApi.browserAutofillSettingsOverridden()) + ); + } + + private _defaultBrowserAutofillDisabled$ = new BehaviorSubject(false); + + defaultBrowserAutofillDisabled$: Observable = + this._defaultBrowserAutofillDisabled$.asObservable(); + + setDefaultBrowserAutofillDisabled(value: boolean) { + this._defaultBrowserAutofillDisabled$.next(value); + } +} diff --git a/apps/browser/src/platform/browser/browser-api.ts b/apps/browser/src/platform/browser/browser-api.ts index 4b4cec7e7da..b27e8ca7c96 100644 --- a/apps/browser/src/platform/browser/browser-api.ts +++ b/apps/browser/src/platform/browser/browser-api.ts @@ -2,6 +2,8 @@ // @ts-strict-ignore import { Observable } from "rxjs"; +import { BrowserClientVendors } from "@bitwarden/common/autofill/constants"; +import { BrowserClientVendor } from "@bitwarden/common/autofill/types"; import { DeviceType } from "@bitwarden/common/enums"; import { isBrowserSafariApi } from "@bitwarden/platform"; @@ -131,6 +133,27 @@ export class BrowserApi { }); } + static getBrowserClientVendor(clientWindow: Window): BrowserClientVendor { + const device = BrowserPlatformUtilsService.getDevice(clientWindow); + + switch (device) { + case DeviceType.ChromeExtension: + case DeviceType.ChromeBrowser: + return BrowserClientVendors.Chrome; + case DeviceType.OperaExtension: + case DeviceType.OperaBrowser: + return BrowserClientVendors.Opera; + case DeviceType.EdgeExtension: + case DeviceType.EdgeBrowser: + return BrowserClientVendors.Edge; + case DeviceType.VivaldiExtension: + case DeviceType.VivaldiBrowser: + return BrowserClientVendors.Vivaldi; + default: + return BrowserClientVendors.Unknown; + } + } + /** * Gets the tab with the given id. * diff --git a/apps/browser/src/platform/popup/view-cache/popup-view-cache.service.ts b/apps/browser/src/platform/popup/view-cache/popup-view-cache.service.ts index 6fc3e11493c..ff63b52ab3f 100644 --- a/apps/browser/src/platform/popup/view-cache/popup-view-cache.service.ts +++ b/apps/browser/src/platform/popup/view-cache/popup-view-cache.service.ts @@ -82,7 +82,7 @@ export class PopupViewCacheService implements ViewCacheService { initialValue, persistNavigation, } = options; - const cachedValue = this.cache[key] + const cachedValue = this.cache[key]?.value ? deserializer(JSON.parse(this.cache[key].value)) : initialValue; const _signal = signal(cachedValue); diff --git a/apps/browser/src/tools/popup/settings/settings-v2.component.html b/apps/browser/src/tools/popup/settings/settings-v2.component.html index b9f4176b927..22e2d9a28d0 100644 --- a/apps/browser/src/tools/popup/settings/settings-v2.component.html +++ b/apps/browser/src/tools/popup/settings/settings-v2.component.html @@ -17,7 +17,15 @@ - {{ "autofill" | i18n }} +
+

{{ "autofill" | i18n }}

+ 1 +
diff --git a/apps/browser/src/tools/popup/settings/settings-v2.component.ts b/apps/browser/src/tools/popup/settings/settings-v2.component.ts index 9301b8622c5..be05452529a 100644 --- a/apps/browser/src/tools/popup/settings/settings-v2.component.ts +++ b/apps/browser/src/tools/popup/settings/settings-v2.component.ts @@ -1,7 +1,15 @@ import { CommonModule } from "@angular/common"; -import { Component } from "@angular/core"; +import { Component, OnInit } from "@angular/core"; import { RouterModule } from "@angular/router"; -import { filter, firstValueFrom, Observable, shareReplay, switchMap } from "rxjs"; +import { + combineLatest, + filter, + firstValueFrom, + map, + Observable, + shareReplay, + switchMap, +} from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; @@ -12,6 +20,8 @@ import { BadgeComponent, ItemModule } from "@bitwarden/components"; import { NudgeStatus, VaultNudgesService, VaultNudgeType } from "@bitwarden/vault"; import { CurrentAccountComponent } from "../../../auth/popup/account-switching/current-account.component"; +import { AutofillBrowserSettingsService } from "../../../autofill/services/autofill-browser-settings.service"; +import { BrowserApi } from "../../../platform/browser/browser-api"; import { PopOutComponent } from "../../../platform/popup/components/pop-out.component"; import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-header.component"; import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.component"; @@ -31,8 +41,10 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co BadgeComponent, ], }) -export class SettingsV2Component { +export class SettingsV2Component implements OnInit { VaultNudgeType = VaultNudgeType; + activeUserId: UserId | null = null; + protected isBrowserAutofillSettingOverridden = false; private authenticatedAccount$: Observable = this.accountService.activeAccount$.pipe( filter((account): account is Account => account !== null), @@ -51,6 +63,19 @@ export class SettingsV2Component { ), ); + showAutofillBadge$: Observable = combineLatest([ + this.autofillBrowserSettingsService.defaultBrowserAutofillDisabled$, + this.authenticatedAccount$, + ]).pipe( + switchMap(([defaultBrowserAutofillDisabled, account]) => + this.vaultNudgesService.showNudge$(VaultNudgeType.AutofillNudge, account.id).pipe( + map((nudgeStatus) => { + return !defaultBrowserAutofillDisabled && nudgeStatus.hasBadgeDismissed === false; + }), + ), + ), + ); + protected isNudgeFeatureEnabled$ = this.configService.getFeatureFlag$( FeatureFlag.PM8851_BrowserOnboardingNudge, ); @@ -58,9 +83,17 @@ export class SettingsV2Component { constructor( private readonly vaultNudgesService: VaultNudgesService, private readonly accountService: AccountService, + private readonly autofillBrowserSettingsService: AutofillBrowserSettingsService, private readonly configService: ConfigService, ) {} + async ngOnInit() { + this.isBrowserAutofillSettingOverridden = + await this.autofillBrowserSettingsService.isBrowserAutofillSettingOverridden( + BrowserApi.getBrowserClientVendor(window), + ); + } + async dismissBadge(type: VaultNudgeType) { if (!(await firstValueFrom(this.showVaultBadge$)).hasBadgeDismissed) { const account = await firstValueFrom(this.authenticatedAccount$); diff --git a/libs/vault/src/components/spotlight/spotlight.component.html b/libs/vault/src/components/spotlight/spotlight.component.html index e949ca4d912..0c6a37914d8 100644 --- a/libs/vault/src/components/spotlight/spotlight.component.html +++ b/libs/vault/src/components/spotlight/spotlight.component.html @@ -23,10 +23,9 @@ type="button" buttonType="primary" *ngIf="buttonText" - (click)="handleButtonClick()" + (click)="handleButtonClick($event)" > {{ buttonText }} + - -
diff --git a/libs/vault/src/components/spotlight/spotlight.component.ts b/libs/vault/src/components/spotlight/spotlight.component.ts index e52669cc404..8639fe7947f 100644 --- a/libs/vault/src/components/spotlight/spotlight.component.ts +++ b/libs/vault/src/components/spotlight/spotlight.component.ts @@ -19,11 +19,13 @@ export class SpotlightComponent { @Input() buttonText?: string; // Wheter the component can be dismissed, if true, the component will not show a close button @Input() persistent = false; + // Optional icon to display on the button + @Input() buttonIcon: string | null = null; @Output() onDismiss = new EventEmitter(); - @Output() onButtonClick = new EventEmitter(); + @Output() onButtonClick = new EventEmitter(); - handleButtonClick(): void { - this.onButtonClick.emit(); + handleButtonClick(event: MouseEvent): void { + this.onButtonClick.emit(event); } handleDismiss(): void { diff --git a/libs/vault/src/components/spotlight/spotlight.stories.ts b/libs/vault/src/components/spotlight/spotlight.stories.ts index 9f7757e4528..8e660aacbad 100644 --- a/libs/vault/src/components/spotlight/spotlight.stories.ts +++ b/libs/vault/src/components/spotlight/spotlight.stories.ts @@ -52,9 +52,9 @@ export const Persistent: Story = { }, }; -export const WithCustomButton: Story = { +export const WithButtonIcon: Story = { args: { - buttonText: "Custom Button", + buttonIcon: "bwi bwi-external-link", }, render: (args) => ({ props: args, @@ -62,19 +62,9 @@ export const WithCustomButton: Story = { - - + buttonText="External Link" + buttonIcon="bwi-external-link" + > `, }), }; diff --git a/libs/vault/src/services/custom-nudges-services/autofill-nudge.service.ts b/libs/vault/src/services/custom-nudges-services/autofill-nudge.service.ts new file mode 100644 index 00000000000..b5595e590c9 --- /dev/null +++ b/libs/vault/src/services/custom-nudges-services/autofill-nudge.service.ts @@ -0,0 +1,47 @@ +import { Injectable, inject } from "@angular/core"; +import { Observable, combineLatest, from, map, of } from "rxjs"; +import { catchError } from "rxjs/operators"; + +import { VaultProfileService } from "@bitwarden/angular/vault/services/vault-profile.service"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { UserId } from "@bitwarden/common/types/guid"; + +import { DefaultSingleNudgeService } from "../default-single-nudge.service"; +import { NudgeStatus, VaultNudgeType } from "../vault-nudges.service"; + +const THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1000; + +/** + * Custom Nudge Service to use for the Autofill Nudge in the Vault + */ +@Injectable({ + providedIn: "root", +}) +export class AutofillNudgeService extends DefaultSingleNudgeService { + vaultProfileService = inject(VaultProfileService); + logService = inject(LogService); + + nudgeStatus$(_: VaultNudgeType, userId: UserId): Observable { + const profileDate$ = from(this.vaultProfileService.getProfileCreationDate(userId)).pipe( + catchError(() => { + this.logService.error("Error getting profile creation date"); + // Default to today to ensure we show the nudge + return of(new Date()); + }), + ); + + return combineLatest([ + profileDate$, + this.getNudgeStatus$(VaultNudgeType.AutofillNudge, userId), + of(Date.now() - THIRTY_DAYS_MS), + ]).pipe( + map(([profileCreationDate, status, profileCutoff]) => { + const profileOlderThanCutoff = profileCreationDate.getTime() < profileCutoff; + return { + hasBadgeDismissed: status.hasBadgeDismissed || profileOlderThanCutoff, + hasSpotlightDismissed: status.hasSpotlightDismissed || profileOlderThanCutoff, + }; + }), + ); + } +} diff --git a/libs/vault/src/services/custom-nudges-services/index.ts b/libs/vault/src/services/custom-nudges-services/index.ts index 68427a8dc4d..2e9ade985cc 100644 --- a/libs/vault/src/services/custom-nudges-services/index.ts +++ b/libs/vault/src/services/custom-nudges-services/index.ts @@ -1,3 +1,4 @@ +export * from "./autofill-nudge.service"; export * from "./has-items-nudge.service"; export * from "./download-bitwarden-nudge.service"; export * from "./empty-vault-nudge.service"; diff --git a/libs/vault/src/services/vault-nudges.service.spec.ts b/libs/vault/src/services/vault-nudges.service.spec.ts index a7469410711..89465fc5382 100644 --- a/libs/vault/src/services/vault-nudges.service.spec.ts +++ b/libs/vault/src/services/vault-nudges.service.spec.ts @@ -55,6 +55,7 @@ describe("Vault Nudges Service", () => { useValue: mock(), }, { provide: CipherService, useValue: mock() }, + { provide: LogService, useValue: mock() }, { provide: AccountService, useValue: mock(), diff --git a/libs/vault/src/services/vault-nudges.service.ts b/libs/vault/src/services/vault-nudges.service.ts index 171fe85252f..e04cb609d7f 100644 --- a/libs/vault/src/services/vault-nudges.service.ts +++ b/libs/vault/src/services/vault-nudges.service.ts @@ -9,6 +9,7 @@ import { UserId } from "@bitwarden/common/types/guid"; import { HasItemsNudgeService, EmptyVaultNudgeService, + AutofillNudgeService, DownloadBitwardenNudgeService, NewItemNudgeService, } from "./custom-nudges-services"; @@ -28,6 +29,7 @@ export enum VaultNudgeType { */ EmptyVaultNudge = "empty-vault-nudge", HasVaultItems = "has-vault-items", + AutofillNudge = "autofill-nudge", DownloadBitwarden = "download-bitwarden", newLoginItemStatus = "new-login-item-status", newCardItemStatus = "new-card-item-status", @@ -57,6 +59,7 @@ export class VaultNudgesService { private customNudgeServices: Partial> = { [VaultNudgeType.HasVaultItems]: inject(HasItemsNudgeService), [VaultNudgeType.EmptyVaultNudge]: inject(EmptyVaultNudgeService), + [VaultNudgeType.AutofillNudge]: inject(AutofillNudgeService), [VaultNudgeType.DownloadBitwarden]: inject(DownloadBitwardenNudgeService), [VaultNudgeType.newLoginItemStatus]: this.newItemNudgeService, [VaultNudgeType.newCardItemStatus]: this.newItemNudgeService, From 903b1bf0bade6587d8d4ffa895c0570bac7dd53a Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Fri, 9 May 2025 08:56:56 -0700 Subject: [PATCH 16/36] re-add missing i18n keys (#14690) --- apps/desktop/src/locales/en/messages.json | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/desktop/src/locales/en/messages.json b/apps/desktop/src/locales/en/messages.json index 681a0e3147c..ea198086f8d 100644 --- a/apps/desktop/src/locales/en/messages.json +++ b/apps/desktop/src/locales/en/messages.json @@ -3616,6 +3616,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, From 47d41f928956599bd367974cec9d0516d18059d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 18:12:02 +0200 Subject: [PATCH 17/36] [deps]: Update codecov/test-results-action action to v1.1.0 (#14501) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel García --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 78a735e4870..f76b349ccd4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -70,7 +70,7 @@ jobs: uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2 - name: Upload results to codecov.io - uses: codecov/test-results-action@4e79e65778be1cecd5df25e14af1eafb6df80ea9 # v1.0.2 + uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0 rust: name: Run Rust tests on ${{ matrix.os }} From 89be04a45ef1ec20728148198291bc9ed0baed0a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 19:01:50 +0200 Subject: [PATCH 18/36] [deps]: Update dorny/test-reporter action to v2 (#14518) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel García --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f76b349ccd4..50f04ebaeb1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,7 +58,7 @@ jobs: run: npm test -- --coverage --maxWorkers=3 - name: Report test results - uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5 # v1.9.1 + uses: dorny/test-reporter@6e6a65b7a0bd2c9197df7d0ae36ac5cee784230c # v2.0.0 if: ${{ github.event.pull_request.head.repo.full_name == github.repository && !cancelled() }} with: name: Test Results From 0d2c890da11b23948d229070c89050f911fe8852 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 13:29:48 -0400 Subject: [PATCH 19/36] [deps] UI Foundation: Update @types/react to v18.3.20 (#14464) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0db144090b9..bdf9c3a9d26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11820,9 +11820,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "version": "18.3.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", + "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 7c1873090c1..6fe463ac387 100644 --- a/package.json +++ b/package.json @@ -212,7 +212,7 @@ }, "react": "18.3.1", "react-dom": "18.3.1", - "@types/react": "18.3.1", + "@types/react": "18.3.20", "replacestream": "4.0.3" }, "lint-staged": { From 624dafa431f9bf783529e11f35cd665f276eb664 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 13:51:15 -0400 Subject: [PATCH 20/36] [deps] UI Foundation: Update angular-cli monorepo to v18.2.19 (#14465) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 718 +++++++++++++++++++++------------------------- package.json | 6 +- 2 files changed, 333 insertions(+), 391 deletions(-) diff --git a/package-lock.json b/package-lock.json index bdf9c3a9d26..1e7e0741cd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,9 +74,9 @@ "zxcvbn": "4.4.2" }, "devDependencies": { - "@angular-devkit/build-angular": "18.2.12", + "@angular-devkit/build-angular": "18.2.19", "@angular-eslint/schematics": "18.4.3", - "@angular/cli": "18.2.12", + "@angular/cli": "18.2.19", "@angular/compiler-cli": "18.2.13", "@babel/core": "7.24.9", "@babel/preset-env": "7.24.8", @@ -84,7 +84,7 @@ "@electron/notarize": "2.5.0", "@electron/rebuild": "3.7.2", "@lit-labs/signals": "0.1.2", - "@ngtools/webpack": "18.2.12", + "@ngtools/webpack": "18.2.19", "@storybook/addon-a11y": "8.6.12", "@storybook/addon-actions": "8.6.12", "@storybook/addon-designs": "8.2.1", @@ -414,29 +414,28 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.12.tgz", - "integrity": "sha512-quVUi7eqTq9OHumQFNl9Y8t2opm8miu4rlYnuF6rbujmmBDvdUvR6trFChueRczl2p5HWqTOr6NPoDGQm8AyNw==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.19.tgz", + "integrity": "sha512-xwY7v+nGE7TXOc4pgY6u57bLzIPSHuecosYr3TiWHAl9iEcKHzkCCFKsLZyunohHmq/i1uA6g3cC6iwp2xNYyg==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.12", - "@angular-devkit/build-webpack": "0.1802.12", - "@angular-devkit/core": "18.2.12", - "@angular/build": "18.2.12", - "@babel/core": "7.25.2", - "@babel/generator": "7.25.0", - "@babel/helper-annotate-as-pure": "7.24.7", + "@angular-devkit/architect": "0.1802.19", + "@angular-devkit/build-webpack": "0.1802.19", + "@angular-devkit/core": "18.2.19", + "@angular/build": "18.2.19", + "@babel/core": "7.26.10", + "@babel/generator": "7.26.10", + "@babel/helper-annotate-as-pure": "7.25.9", "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.25.0", - "@babel/plugin-transform-async-to-generator": "7.24.7", - "@babel/plugin-transform-runtime": "7.24.7", - "@babel/preset-env": "7.25.3", - "@babel/runtime": "7.25.0", + "@babel/plugin-transform-async-generator-functions": "7.26.8", + "@babel/plugin-transform-async-to-generator": "7.25.9", + "@babel/plugin-transform-runtime": "7.26.10", + "@babel/preset-env": "7.26.9", + "@babel/runtime": "7.26.10", "@discoveryjs/json-ext": "0.6.1", - "@ngtools/webpack": "18.2.12", - "@vitejs/plugin-basic-ssl": "1.1.0", + "@ngtools/webpack": "18.2.19", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", "babel-loader": "9.1.3", @@ -446,7 +445,7 @@ "css-loader": "7.1.2", "esbuild-wasm": "0.23.0", "fast-glob": "3.3.2", - "http-proxy-middleware": "3.0.3", + "http-proxy-middleware": "3.0.5", "https-proxy-agent": "7.0.5", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", @@ -475,7 +474,6 @@ "terser": "5.31.6", "tree-kill": "1.2.2", "tslib": "2.6.3", - "vite": "5.4.6", "watchpack": "2.4.1", "webpack": "5.94.0", "webpack-dev-middleware": "7.4.2", @@ -543,13 +541,13 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.12.tgz", - "integrity": "sha512-bepVb2/GtJppYKaeW8yTGE6egmoWZ7zagFDsmBdbF+BYp+HmeoPsclARcdryBPVq68zedyTRdvhWSUTbw1AYuw==", + "version": "0.1802.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.19.tgz", + "integrity": "sha512-M4B1tzxGX1nWCZr9GMM8OO0yBJO2HFSdK8M8P74vEFQfKIeq3y16IQ5zlEveJrkCOFVtmlIy2C9foMCdNyBRMA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "18.2.19", "rxjs": "7.8.1" }, "engines": { @@ -559,9 +557,9 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.19.tgz", + "integrity": "sha512-Ptf92Zomc6FCr7GWmHKdgOUbA1GpctZwH/hRcpYpU3tM56MG2t5FOFpufnE595GgolOCktabkFEoODMG8PBVDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -587,22 +585,22 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -627,95 +625,110 @@ "semver": "bin/semver.js" } }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "node_modules/@angular-devkit/build-angular/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -827,6 +840,20 @@ "webpack": ">=5" } }, + "node_modules/@angular-devkit/build-angular/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/browserslist": { "version": "4.24.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", @@ -1345,9 +1372,9 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1416,13 +1443,13 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.12.tgz", - "integrity": "sha512-0Z3fdbZVRnjYWE2/VYyfy+uieY+6YZyEp4ylzklVkc+fmLNsnz4Zw6cK1LzzcBqAwKIyh1IdW20Cg7o8b0sONA==", + "version": "0.1802.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.19.tgz", + "integrity": "sha512-axz1Sasn+c+GJpJexBL+B3Rh1w3wJrQq8k8gkniodjJ594p4ti2qGk7i9Tj8A4cXx5fGY+EpuZvKfI/9Tr7QwA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.12", + "@angular-devkit/architect": "0.1802.19", "rxjs": "7.8.1" }, "engines": { @@ -1436,13 +1463,13 @@ } }, "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.12.tgz", - "integrity": "sha512-bepVb2/GtJppYKaeW8yTGE6egmoWZ7zagFDsmBdbF+BYp+HmeoPsclARcdryBPVq68zedyTRdvhWSUTbw1AYuw==", + "version": "0.1802.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.19.tgz", + "integrity": "sha512-M4B1tzxGX1nWCZr9GMM8OO0yBJO2HFSdK8M8P74vEFQfKIeq3y16IQ5zlEveJrkCOFVtmlIy2C9foMCdNyBRMA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "18.2.19", "rxjs": "7.8.1" }, "engines": { @@ -1452,9 +1479,9 @@ } }, "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.19.tgz", + "integrity": "sha512-Ptf92Zomc6FCr7GWmHKdgOUbA1GpctZwH/hRcpYpU3tM56MG2t5FOFpufnE595GgolOCktabkFEoODMG8PBVDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1581,13 +1608,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.14.tgz", - "integrity": "sha512-mukjZIHHB7gWratq8fZwUq5WZ+1bF4feG/idXr1wgQ+/FqWjs2PP7HDesHVcPymmRulpTyCpB7TNB1O1fgnCpA==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.19.tgz", + "integrity": "sha512-P/0KjkzOf2ZShuShx3cBbjLI7XlcS6B/yCRBo1MQfCC4cZfmzPQoUEOSQeYZgy5pnC24f+dKh/+TWc5uYL/Lvg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.14", + "@angular-devkit/core": "18.2.19", "jsonc-parser": "3.3.1", "magic-string": "0.30.11", "ora": "5.4.1", @@ -1600,9 +1627,9 @@ } }, "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.14.tgz", - "integrity": "sha512-UGIGOjXuOyCW+5S4tINu7e6LOu738CmTw3h7Ui1I8OzdTIYJcYJrei8sgrwDwOYADRal+p0MeMlnykH3TM5XBA==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.19.tgz", + "integrity": "sha512-Ptf92Zomc6FCr7GWmHKdgOUbA1GpctZwH/hRcpYpU3tM56MG2t5FOFpufnE595GgolOCktabkFEoODMG8PBVDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2034,14 +2061,14 @@ } }, "node_modules/@angular/build": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.12.tgz", - "integrity": "sha512-4Ohz+OSILoL+cCAQ4UTiCT5v6pctu3fXNoNpTEUK46OmxELk9jDITO5rNyNS7TxBn9wY69kjX5VcDf7MenquFQ==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.19.tgz", + "integrity": "sha512-dTqR+mhcZWtCRyOafvzHNVpYxMQnt8HHHqNM0kyEMzcztXL2L9zDlKr0H9d+AgGGq/v4qwCh+1gFDxsHByZwMQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.12", + "@angular-devkit/architect": "0.1802.19", "@babel/core": "7.25.2", "@babel/helper-annotate-as-pure": "7.24.7", "@babel/helper-split-export-declaration": "7.24.7", @@ -2063,7 +2090,7 @@ "rollup": "4.22.4", "sass": "1.77.6", "semver": "7.6.3", - "vite": "5.4.6", + "vite": "~5.4.17", "watchpack": "2.4.1" }, "engines": { @@ -2103,13 +2130,13 @@ } }, "node_modules/@angular/build/node_modules/@angular-devkit/architect": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.12.tgz", - "integrity": "sha512-bepVb2/GtJppYKaeW8yTGE6egmoWZ7zagFDsmBdbF+BYp+HmeoPsclARcdryBPVq68zedyTRdvhWSUTbw1AYuw==", + "version": "0.1802.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.19.tgz", + "integrity": "sha512-M4B1tzxGX1nWCZr9GMM8OO0yBJO2HFSdK8M8P74vEFQfKIeq3y16IQ5zlEveJrkCOFVtmlIy2C9foMCdNyBRMA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "18.2.19", "rxjs": "7.8.1" }, "engines": { @@ -2119,9 +2146,9 @@ } }, "node_modules/@angular/build/node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.19.tgz", + "integrity": "sha512-Ptf92Zomc6FCr7GWmHKdgOUbA1GpctZwH/hRcpYpU3tM56MG2t5FOFpufnE595GgolOCktabkFEoODMG8PBVDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2325,18 +2352,18 @@ } }, "node_modules/@angular/cli": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.12.tgz", - "integrity": "sha512-xhuZ/b7IhqNw1MgXf+arWf4x+GfUSt/IwbdWU4+CO8A7h0Y46zQywouP/KUK3cMQZfVdHdciTBvlpF3vFacA6Q==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.19.tgz", + "integrity": "sha512-LGVMTc36JQuw8QX8Sclxyei306EQW3KslopXbf7cfqt6D5/fHS+FqqA0O7V8ob/vOGMca+l6hQD27nW5Y3W6pA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.12", - "@angular-devkit/core": "18.2.12", - "@angular-devkit/schematics": "18.2.12", + "@angular-devkit/architect": "0.1802.19", + "@angular-devkit/core": "18.2.19", + "@angular-devkit/schematics": "18.2.19", "@inquirer/prompts": "5.3.8", "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.12", + "@schematics/angular": "18.2.19", "@yarnpkg/lockfile": "1.1.0", "ini": "4.1.3", "jsonc-parser": "3.3.1", @@ -2359,13 +2386,13 @@ } }, "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.12.tgz", - "integrity": "sha512-bepVb2/GtJppYKaeW8yTGE6egmoWZ7zagFDsmBdbF+BYp+HmeoPsclARcdryBPVq68zedyTRdvhWSUTbw1AYuw==", + "version": "0.1802.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.19.tgz", + "integrity": "sha512-M4B1tzxGX1nWCZr9GMM8OO0yBJO2HFSdK8M8P74vEFQfKIeq3y16IQ5zlEveJrkCOFVtmlIy2C9foMCdNyBRMA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "18.2.19", "rxjs": "7.8.1" }, "engines": { @@ -2375,9 +2402,9 @@ } }, "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.19.tgz", + "integrity": "sha512-Ptf92Zomc6FCr7GWmHKdgOUbA1GpctZwH/hRcpYpU3tM56MG2t5FOFpufnE595GgolOCktabkFEoODMG8PBVDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2402,25 +2429,6 @@ } } }, - "node_modules/@angular/cli/node_modules/@angular-devkit/schematics": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.12.tgz", - "integrity": "sha512-mMea9txHbnCX5lXLHlo0RAgfhFHDio45/jMsREM2PA8UtVf2S8ltXz7ZwUrUyMQRv8vaSfn4ijDstF4hDMnRgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.2.12", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.11", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, "node_modules/@angular/cli/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -2718,14 +2726,14 @@ "license": "ISC" }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -2786,15 +2794,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -2916,13 +2925,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, @@ -2934,13 +2943,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", + "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -3031,9 +3040,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -3116,18 +3125,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -3158,25 +3167,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.27.1" }, "bin": { "parser": "bin/babel-parser.js" @@ -3616,16 +3625,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -3635,15 +3643,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4281,6 +4289,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", @@ -4298,16 +4323,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -4318,6 +4343,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -4598,9 +4637,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -4610,30 +4649,30 @@ } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -4642,13 +4681,13 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -4657,26 +4696,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -5022,23 +5049,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@compodoc/compodoc/node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", @@ -5055,42 +5065,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@compodoc/compodoc/node_modules/@babel/plugin-transform-private-methods": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", @@ -5233,19 +5207,6 @@ "node": ">= 6" } }, - "node_modules/@compodoc/compodoc/node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@compodoc/compodoc/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -8353,9 +8314,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.12.tgz", - "integrity": "sha512-FFJAwtWbtpncMOVNuULPBwFJB7GSjiUwO93eGTzRp8O4EPQ8lCQeFbezQm/NP34+T0+GBLGzPSuQT+muob8YKw==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.19.tgz", + "integrity": "sha512-bExj5JrByKPibsqBbn5Pjn8lo91AUOTsyP2hgKpnOnmSr62rhWSiRwXltgz2MCiZRmuUznpt93WiOLixgYfYvQ==", "dev": true, "license": "MIT", "engines": { @@ -9633,14 +9594,14 @@ "license": "MIT" }, "node_modules/@schematics/angular": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.12.tgz", - "integrity": "sha512-sIoeipsisK5eTLW3XuNZYcal83AfslBbgI7LnV+3VrXwpasKPGHwo2ZdwhCd2IXAkuJ02Iyu7MyV0aQRM9i/3g==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.19.tgz", + "integrity": "sha512-s9aynH/fwB/LT94miVfsaL2C4Qd5BLgjMzWFx7iJ8Hyv7FjOBGYO6eGVovjCt2c6/abG+GQAk4EBOCfg3AUtCA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.12", - "@angular-devkit/schematics": "18.2.12", + "@angular-devkit/core": "18.2.19", + "@angular-devkit/schematics": "18.2.19", "jsonc-parser": "3.3.1" }, "engines": { @@ -9650,9 +9611,9 @@ } }, "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.19.tgz", + "integrity": "sha512-Ptf92Zomc6FCr7GWmHKdgOUbA1GpctZwH/hRcpYpU3tM56MG2t5FOFpufnE595GgolOCktabkFEoODMG8PBVDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9677,25 +9638,6 @@ } } }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.12.tgz", - "integrity": "sha512-mMea9txHbnCX5lXLHlo0RAgfhFHDio45/jMsREM2PA8UtVf2S8ltXz7ZwUrUyMQRv8vaSfn4ijDstF4hDMnRgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "18.2.12", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.11", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, "node_modules/@schematics/angular/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -21441,9 +21383,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz", - "integrity": "sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", "dev": true, "license": "MIT", "dependencies": { @@ -24398,15 +24340,15 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -35658,9 +35600,9 @@ } }, "node_modules/vite": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", - "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 6fe463ac387..81f1c92d5a5 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,9 @@ "libs/**/*" ], "devDependencies": { - "@angular-devkit/build-angular": "18.2.12", + "@angular-devkit/build-angular": "18.2.19", "@angular-eslint/schematics": "18.4.3", - "@angular/cli": "18.2.12", + "@angular/cli": "18.2.19", "@angular/compiler-cli": "18.2.13", "@babel/core": "7.24.9", "@babel/preset-env": "7.24.8", @@ -46,7 +46,7 @@ "@electron/notarize": "2.5.0", "@electron/rebuild": "3.7.2", "@lit-labs/signals": "0.1.2", - "@ngtools/webpack": "18.2.12", + "@ngtools/webpack": "18.2.19", "@storybook/addon-a11y": "8.6.12", "@storybook/addon-actions": "8.6.12", "@storybook/addon-designs": "8.2.1", From e538425e7a5ce635b1fbe88835a4f392d31413ee Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Fri, 9 May 2025 12:07:14 -0700 Subject: [PATCH 21/36] [PM-21343] - add download bitwarden to list of nudges for settings badge (#14682) * add download bitwarden to list of nudges for settings badge * update tests --- .../src/services/vault-nudges.service.spec.ts | 33 ++++++++++++++----- .../src/services/vault-nudges.service.ts | 2 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/libs/vault/src/services/vault-nudges.service.spec.ts b/libs/vault/src/services/vault-nudges.service.spec.ts index 89465fc5382..40c58644309 100644 --- a/libs/vault/src/services/vault-nudges.service.spec.ts +++ b/libs/vault/src/services/vault-nudges.service.spec.ts @@ -12,7 +12,11 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { FakeStateProvider, mockAccountServiceWith } from "../../../common/spec"; -import { HasItemsNudgeService, EmptyVaultNudgeService } from "./custom-nudges-services"; +import { + HasItemsNudgeService, + EmptyVaultNudgeService, + DownloadBitwardenNudgeService, +} from "./custom-nudges-services"; import { DefaultSingleNudgeService } from "./default-single-nudge.service"; import { VaultNudgesService, VaultNudgeType } from "./vault-nudges.service"; @@ -25,6 +29,8 @@ describe("Vault Nudges Service", () => { getFeatureFlag: jest.fn().mockReturnValue(true), }; + const vaultNudgeServices = [EmptyVaultNudgeService, DownloadBitwardenNudgeService]; + beforeEach(async () => { fakeStateProvider = new FakeStateProvider(mockAccountServiceWith("user-id" as UserId)); @@ -46,6 +52,10 @@ describe("Vault Nudges Service", () => { provide: HasItemsNudgeService, useValue: mock(), }, + { + provide: DownloadBitwardenNudgeService, + useValue: mock(), + }, { provide: EmptyVaultNudgeService, useValue: mock(), @@ -130,11 +140,14 @@ describe("Vault Nudges Service", () => { describe("HasActiveBadges", () => { it("should return true if a nudgeType with hasBadgeDismissed === false", async () => { - TestBed.overrideProvider(EmptyVaultNudgeService, { - useValue: { - nudgeStatus$: () => of({ hasBadgeDismissed: false, hasSpotlightDismissed: false }), - }, + vaultNudgeServices.forEach((service) => { + TestBed.overrideProvider(service, { + useValue: { + nudgeStatus$: () => of({ hasBadgeDismissed: false, hasSpotlightDismissed: false }), + }, + }); }); + const service = testBed.inject(VaultNudgesService); const result = await firstValueFrom(service.hasActiveBadges$("user-id" as UserId)); @@ -142,10 +155,12 @@ describe("Vault Nudges Service", () => { expect(result).toBe(true); }); it("should return false if all nudgeTypes have hasBadgeDismissed === true", async () => { - TestBed.overrideProvider(EmptyVaultNudgeService, { - useValue: { - nudgeStatus$: () => of({ hasBadgeDismissed: true, hasSpotlightDismissed: true }), - }, + vaultNudgeServices.forEach((service) => { + TestBed.overrideProvider(service, { + useValue: { + nudgeStatus$: () => of({ hasBadgeDismissed: true, hasSpotlightDismissed: false }), + }, + }); }); const service = testBed.inject(VaultNudgesService); diff --git a/libs/vault/src/services/vault-nudges.service.ts b/libs/vault/src/services/vault-nudges.service.ts index e04cb609d7f..be6e978eaa0 100644 --- a/libs/vault/src/services/vault-nudges.service.ts +++ b/libs/vault/src/services/vault-nudges.service.ts @@ -114,7 +114,7 @@ export class VaultNudgesService { */ hasActiveBadges$(userId: UserId): Observable { // Add more nudge types here if they have the settings badge feature - const nudgeTypes = [VaultNudgeType.EmptyVaultNudge]; + const nudgeTypes = [VaultNudgeType.EmptyVaultNudge, VaultNudgeType.DownloadBitwarden]; const nudgeTypesWithBadge$ = nudgeTypes.map((nudge) => { return this.getNudgeService(nudge) From 6b6f9577f4344daa32767824e9d209e640b5f72e Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Fri, 9 May 2025 12:08:12 -0700 Subject: [PATCH 22/36] multiple fixes for bitwarden component (#14685) --- apps/browser/src/_locales/en/messages.json | 6 ++++ .../download-bitwarden.component.html | 36 +++++++++++++------ .../settings/download-bitwarden.component.ts | 3 +- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 1c3214a6ef7..57a0e78fd1b 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -4551,6 +4551,12 @@ "downloadFromBitwardenNow": { "message": "Download from bitwarden.com now" }, + "getItOnGooglePlay": { + "message": "Get it on Google Play" + }, + "downloadOnTheAppStore": { + "message": "Download on the App Store" + }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, diff --git a/apps/browser/src/vault/popup/settings/download-bitwarden.component.html b/apps/browser/src/vault/popup/settings/download-bitwarden.component.html index ad063691e76..20896a3c782 100644 --- a/apps/browser/src/vault/popup/settings/download-bitwarden.component.html +++ b/apps/browser/src/vault/popup/settings/download-bitwarden.component.html @@ -2,7 +2,6 @@ -

@@ -20,16 +19,30 @@ /> @@ -41,6 +54,7 @@ {{ "downloadFromBitwardenNow" | i18n }} diff --git a/apps/browser/src/vault/popup/settings/download-bitwarden.component.ts b/apps/browser/src/vault/popup/settings/download-bitwarden.component.ts index b51619b86d1..9f04bb58c34 100644 --- a/apps/browser/src/vault/popup/settings/download-bitwarden.component.ts +++ b/apps/browser/src/vault/popup/settings/download-bitwarden.component.ts @@ -6,7 +6,7 @@ import { firstValueFrom } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; -import { CardComponent, TypographyModule } from "@bitwarden/components"; +import { CardComponent, LinkModule, TypographyModule } from "@bitwarden/components"; import { VaultNudgesService, VaultNudgeType } from "@bitwarden/vault"; import { CurrentAccountComponent } from "../../../auth/popup/account-switching/current-account.component"; @@ -27,6 +27,7 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co CardComponent, TypographyModule, CurrentAccountComponent, + LinkModule, ], }) export class DownloadBitwardenComponent implements OnInit { From 51e327e20bdd44f83af4991b8246ebfc12ed6718 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 9 May 2025 21:39:38 +0200 Subject: [PATCH 23/36] Clean up stretchKey (#14520) --- .../services/key-generation.service.spec.ts | 20 +++++++++++++++++++ .../services/key-generation.service.ts | 10 ++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/libs/common/src/platform/services/key-generation.service.spec.ts b/libs/common/src/platform/services/key-generation.service.spec.ts index f75eaeb25be..0a9e997b428 100644 --- a/libs/common/src/platform/services/key-generation.service.spec.ts +++ b/libs/common/src/platform/services/key-generation.service.spec.ts @@ -5,6 +5,7 @@ import { PBKDF2KdfConfig, Argon2KdfConfig } from "@bitwarden/key-management"; import { CryptoFunctionService } from "../../key-management/crypto/abstractions/crypto-function.service"; import { CsprngArray } from "../../types/csprng"; import { EncryptionType } from "../enums"; +import { SymmetricCryptoKey } from "../models/domain/symmetric-crypto-key"; import { KeyGenerationService } from "./key-generation.service"; @@ -98,4 +99,23 @@ describe("KeyGenerationService", () => { expect(key.inner().type).toEqual(EncryptionType.AesCbc256_B64); }); }); + + describe("stretchKey", () => { + it("should stretch a key", async () => { + const key = new SymmetricCryptoKey(new Uint8Array(32)); + + cryptoFunctionService.hkdf.mockResolvedValue(new Uint8Array(64)); + + const stretchedKey = await sut.stretchKey(key); + + expect(stretchedKey.inner().type).toEqual(EncryptionType.AesCbc256_HmacSha256_B64); + }); + it("should throw if key is not 32 bytes", async () => { + const key = new SymmetricCryptoKey(new Uint8Array(64)); + + await expect(sut.stretchKey(key)).rejects.toThrow( + "Key passed into stretchKey is not a 256-bit key.", + ); + }); + }); }); diff --git a/libs/common/src/platform/services/key-generation.service.ts b/libs/common/src/platform/services/key-generation.service.ts index 8f9e6856aa0..dcd1f4f95d7 100644 --- a/libs/common/src/platform/services/key-generation.service.ts +++ b/libs/common/src/platform/services/key-generation.service.ts @@ -1,11 +1,11 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { MasterKey, PinKey } from "@bitwarden/common/types/key"; import { KdfConfig, PBKDF2KdfConfig, Argon2KdfConfig, KdfType } from "@bitwarden/key-management"; import { CryptoFunctionService } from "../../key-management/crypto/abstractions/crypto-function.service"; import { CsprngArray } from "../../types/csprng"; import { KeyGenerationService as KeyGenerationServiceAbstraction } from "../abstractions/key-generation.service"; +import { EncryptionType } from "../enums"; import { Utils } from "../misc/utils"; import { SymmetricCryptoKey } from "../models/domain/symmetric-crypto-key"; @@ -79,7 +79,13 @@ export class KeyGenerationService implements KeyGenerationServiceAbstraction { return new SymmetricCryptoKey(key); } - async stretchKey(key: MasterKey | PinKey): Promise { + async stretchKey(key: SymmetricCryptoKey): Promise { + // The key to be stretched is actually usually the output of a KDF, and not actually meant for AesCbc256_B64 encryption, + // but has the same key length. Only 256-bit key materials should be stretched. + if (key.inner().type != EncryptionType.AesCbc256_B64) { + throw new Error("Key passed into stretchKey is not a 256-bit key."); + } + const newKey = new Uint8Array(64); // Master key and pin key are always 32 bytes const encKey = await this.cryptoFunctionService.hkdfExpand( From 83dc4706f3605d9dd7cb7c4aa5e529f858d006cf Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Fri, 9 May 2025 16:21:47 -0400 Subject: [PATCH 24/36] [PM-21279] Cipher for url speedup (#14684) * Use `perUserCache$` for `getAllDecryptedForUrl` * Fix loads before first lock * Filter out null ciphers --- libs/common/src/vault/services/cipher.service.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libs/common/src/vault/services/cipher.service.ts b/libs/common/src/vault/services/cipher.service.ts index a32568c8112..169568d44e9 100644 --- a/libs/common/src/vault/services/cipher.service.ts +++ b/libs/common/src/vault/services/cipher.service.ts @@ -519,8 +519,15 @@ export class CipherService implements CipherServiceAbstraction { includeOtherTypes?: CipherType[], defaultMatch: UriMatchStrategySetting = null, ): Promise { - const ciphers = await this.getAllDecrypted(userId); - return await this.filterCiphersForUrl(ciphers, url, includeOtherTypes, defaultMatch); + return await firstValueFrom( + this.cipherViews$(userId).pipe( + filter((c) => c != null), + switchMap( + async (ciphers) => + await this.filterCiphersForUrl(ciphers, url, includeOtherTypes, defaultMatch), + ), + ), + ); } async filterCiphersForUrl( From 5470d6a6d97c9f0e94b901e41ded66bb5ca49168 Mon Sep 17 00:00:00 2001 From: Miles Blackwood Date: Fri, 9 May 2025 17:30:32 -0400 Subject: [PATCH 25/36] Fix i18n key mis-entry. (#14711) --- apps/browser/src/autofill/notification/bar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/browser/src/autofill/notification/bar.ts b/apps/browser/src/autofill/notification/bar.ts index 4b9ba58d586..3fd6016eb33 100644 --- a/apps/browser/src/autofill/notification/bar.ts +++ b/apps/browser/src/autofill/notification/bar.ts @@ -61,7 +61,7 @@ function getI18n() { loginSaveSuccess: chrome.i18n.getMessage("loginSaveSuccess"), loginSaveConfirmation: chrome.i18n.getMessage("loginSaveConfirmation"), loginUpdateSuccess: chrome.i18n.getMessage("loginUpdateSuccess"), - loginUpdateConfirmation: chrome.i18n.getMessage("loginUpdatedConfirmation"), + loginUpdatedConfirmation: chrome.i18n.getMessage("loginUpdatedConfirmation"), loginUpdateTaskSuccess: chrome.i18n.getMessage("loginUpdateTaskSuccess"), loginUpdateTaskSuccessAdditional: chrome.i18n.getMessage("loginUpdateTaskSuccessAdditional"), nextSecurityTaskAction: chrome.i18n.getMessage("nextSecurityTaskAction"), From 1b756df749a23b33f6f69b9740a8c3ce6a6fb5fb Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Fri, 9 May 2025 20:21:25 -0400 Subject: [PATCH 26/36] [PM-14484] `ApiService` showing html in error message (#14658) * Make ApiService more testable * Add ApiService tests * Switch to only reading text/plain content --- .../browser/src/background/main.background.ts | 1 + .../src/platform/services/node-api.service.ts | 1 + libs/angular/src/services/injection-tokens.ts | 3 + .../src/services/jslib-services.module.ts | 6 + libs/common/src/services/api.service.spec.ts | 203 ++++++++++++++++++ libs/common/src/services/api.service.ts | 27 ++- 6 files changed, 230 insertions(+), 11 deletions(-) create mode 100644 libs/common/src/services/api.service.spec.ts diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index d295fddda52..85a9cd27c57 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -720,6 +720,7 @@ export default class MainBackground { this.logService, (logoutReason: LogoutReason, userId?: UserId) => this.logout(logoutReason, userId), this.vaultTimeoutSettingsService, + { createRequest: (url, request) => new Request(url, request) }, ); this.fileUploadService = new FileUploadService(this.logService, this.apiService); diff --git a/apps/cli/src/platform/services/node-api.service.ts b/apps/cli/src/platform/services/node-api.service.ts index 8c7629fb3d9..d695272364b 100644 --- a/apps/cli/src/platform/services/node-api.service.ts +++ b/apps/cli/src/platform/services/node-api.service.ts @@ -39,6 +39,7 @@ export class NodeApiService extends ApiService { logService, logoutCallback, vaultTimeoutSettingsService, + { createRequest: (url, request) => new Request(url, request) }, customUserAgent, ); } diff --git a/libs/angular/src/services/injection-tokens.ts b/libs/angular/src/services/injection-tokens.ts index a63d862b0d8..d82ff021962 100644 --- a/libs/angular/src/services/injection-tokens.ts +++ b/libs/angular/src/services/injection-tokens.ts @@ -13,6 +13,7 @@ import { import { Theme } from "@bitwarden/common/platform/enums"; import { StateFactory } from "@bitwarden/common/platform/factories/state-factory"; import { Message } from "@bitwarden/common/platform/messaging"; +import { HttpOperations } from "@bitwarden/common/services/api.service"; import { SafeInjectionToken } from "@bitwarden/ui-common"; // Re-export the SafeInjectionToken from ui-common export { SafeInjectionToken } from "@bitwarden/ui-common"; @@ -61,3 +62,5 @@ export const REFRESH_ACCESS_TOKEN_ERROR_CALLBACK = new SafeInjectionToken<() => export const ENV_ADDITIONAL_REGIONS = new SafeInjectionToken( "ENV_ADDITIONAL_REGIONS", ); + +export const HTTP_OPERATIONS = new SafeInjectionToken("HTTP_OPERATIONS"); diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index d82df8574ff..4e7c558a0f0 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -337,6 +337,7 @@ import { CLIENT_TYPE, DEFAULT_VAULT_TIMEOUT, ENV_ADDITIONAL_REGIONS, + HTTP_OPERATIONS, INTRAPROCESS_MESSAGING_SUBJECT, LOCALES_DIRECTORY, LOCKED_CALLBACK, @@ -700,6 +701,10 @@ const safeProviders: SafeProvider[] = [ }, deps: [ToastService, I18nServiceAbstraction], }), + safeProvider({ + provide: HTTP_OPERATIONS, + useValue: { createRequest: (url, request) => new Request(url, request) }, + }), safeProvider({ provide: ApiServiceAbstraction, useClass: ApiService, @@ -712,6 +717,7 @@ const safeProviders: SafeProvider[] = [ LogService, LOGOUT_CALLBACK, VaultTimeoutSettingsService, + HTTP_OPERATIONS, ], }), safeProvider({ diff --git a/libs/common/src/services/api.service.spec.ts b/libs/common/src/services/api.service.spec.ts new file mode 100644 index 00000000000..eca6066b9b7 --- /dev/null +++ b/libs/common/src/services/api.service.spec.ts @@ -0,0 +1,203 @@ +import { mock, MockProxy } from "jest-mock-extended"; +import { of } from "rxjs"; + +import { LogoutReason } from "@bitwarden/auth/common"; + +import { TokenService } from "../auth/abstractions/token.service"; +import { DeviceType } from "../enums"; +import { VaultTimeoutSettingsService } from "../key-management/vault-timeout"; +import { ErrorResponse } from "../models/response/error.response"; +import { AppIdService } from "../platform/abstractions/app-id.service"; +import { Environment, EnvironmentService } from "../platform/abstractions/environment.service"; +import { LogService } from "../platform/abstractions/log.service"; +import { PlatformUtilsService } from "../platform/abstractions/platform-utils.service"; + +import { ApiService, HttpOperations } from "./api.service"; + +describe("ApiService", () => { + let tokenService: MockProxy; + let platformUtilsService: MockProxy; + let environmentService: MockProxy; + let appIdService: MockProxy; + let refreshAccessTokenErrorCallback: jest.Mock; + let logService: MockProxy; + let logoutCallback: jest.Mock, [reason: LogoutReason]>; + let vaultTimeoutSettingsService: MockProxy; + let httpOperations: MockProxy; + + let sut: ApiService; + + beforeEach(() => { + tokenService = mock(); + platformUtilsService = mock(); + platformUtilsService.getDevice.mockReturnValue(DeviceType.ChromeExtension); + + environmentService = mock(); + appIdService = mock(); + refreshAccessTokenErrorCallback = jest.fn(); + logService = mock(); + logoutCallback = jest.fn(); + vaultTimeoutSettingsService = mock(); + httpOperations = mock(); + + sut = new ApiService( + tokenService, + platformUtilsService, + environmentService, + appIdService, + refreshAccessTokenErrorCallback, + logService, + logoutCallback, + vaultTimeoutSettingsService, + httpOperations, + "custom-user-agent", + ); + }); + + describe("send", () => { + it("handles ok GET", async () => { + environmentService.environment$ = of({ + getApiUrl: () => "https://example.com", + } satisfies Partial as Environment); + + httpOperations.createRequest.mockImplementation((url, request) => { + return { + url: url, + cache: request.cache, + credentials: request.credentials, + method: request.method, + mode: request.mode, + signal: request.signal, + headers: new Headers(request.headers), + } satisfies Partial as unknown as Request; + }); + + tokenService.getAccessToken.mockResolvedValue("access_token"); + tokenService.tokenNeedsRefresh.mockResolvedValue(false); + + const nativeFetch = jest.fn, [request: Request]>(); + + nativeFetch.mockImplementation((request) => { + return Promise.resolve({ + ok: true, + status: 200, + json: () => Promise.resolve({ hello: "world" }), + headers: new Headers({ + "content-type": "application/json", + }), + } satisfies Partial as Response); + }); + + sut.nativeFetch = nativeFetch; + + const response = await sut.send("GET", "/something", null, true, true, null, null); + + expect(nativeFetch).toHaveBeenCalledTimes(1); + const request = nativeFetch.mock.calls[0][0]; + // This should get set for users of send + expect(request.cache).toBe("no-store"); + // TODO: Could expect on the credentials parameter + expect(request.headers.get("Device-Type")).toBe("2"); // Chrome Extension + // Custom user agent should get set + expect(request.headers.get("User-Agent")).toBe("custom-user-agent"); + // This should be set when the caller has indicated there is a response + expect(request.headers.get("Accept")).toBe("application/json"); + // If they have indicated that it's authed, then the authorization header should get set. + expect(request.headers.get("Authorization")).toBe("Bearer access_token"); + // The response body + expect(response).toEqual({ hello: "world" }); + }); + }); + + const errorData: { + name: string; + input: Partial; + error: Partial; + }[] = [ + { + name: "json response in camel case", + input: { + json: () => Promise.resolve({ message: "Something bad happened." }), + headers: new Headers({ + "content-type": "application/json", + }), + }, + error: { + message: "Something bad happened.", + }, + }, + { + name: "json response in pascal case", + input: { + json: () => Promise.resolve({ Message: "Something bad happened." }), + headers: new Headers({ + "content-type": "application/json", + }), + }, + error: { + message: "Something bad happened.", + }, + }, + { + name: "json response with charset in content type", + input: { + json: () => Promise.resolve({ message: "Something bad happened." }), + headers: new Headers({ + "content-type": "application/json; charset=utf-8", + }), + }, + error: { + message: "Something bad happened.", + }, + }, + { + name: "text/plain response", + input: { + text: () => Promise.resolve("Something bad happened."), + headers: new Headers({ + "content-type": "text/plain", + }), + }, + error: { + message: "Something bad happened.", + }, + }, + ]; + + it.each(errorData)( + "throws error-like response when not ok response with $name", + async ({ input, error }) => { + environmentService.environment$ = of({ + getApiUrl: () => "https://example.com", + } satisfies Partial as Environment); + + httpOperations.createRequest.mockImplementation((url, request) => { + return { + url: url, + cache: request.cache, + credentials: request.credentials, + method: request.method, + mode: request.mode, + signal: request.signal, + headers: new Headers(request.headers), + } satisfies Partial as unknown as Request; + }); + + const nativeFetch = jest.fn, [request: Request]>(); + + nativeFetch.mockImplementation((request) => { + return Promise.resolve({ + ok: false, + status: 400, + ...input, + } satisfies Partial as Response); + }); + + sut.nativeFetch = nativeFetch; + + await expect( + async () => await sut.send("GET", "/something", null, true, true, null, null), + ).rejects.toMatchObject(error); + }, + ); +}); diff --git a/libs/common/src/services/api.service.ts b/libs/common/src/services/api.service.ts index fb4d08db81c..5c4bcdedb26 100644 --- a/libs/common/src/services/api.service.ts +++ b/libs/common/src/services/api.service.ts @@ -139,6 +139,10 @@ import { AttachmentResponse } from "../vault/models/response/attachment.response import { CipherResponse } from "../vault/models/response/cipher.response"; import { OptionalCipherResponse } from "../vault/models/response/optional-cipher.response"; +export type HttpOperations = { + createRequest: (url: string, request: RequestInit) => Request; +}; + /** * @deprecated The `ApiService` class is deprecated and calls should be extracted into individual * api services. The `send` method is still allowed to be used within api services. For background @@ -166,6 +170,7 @@ export class ApiService implements ApiServiceAbstraction { private logService: LogService, private logoutCallback: (logoutReason: LogoutReason) => Promise, private vaultTimeoutSettingsService: VaultTimeoutSettingsService, + private readonly httpOperations: HttpOperations, private customUserAgent: string = null, ) { this.device = platformUtilsService.getDevice(); @@ -217,7 +222,7 @@ export class ApiService implements ApiServiceAbstraction { const env = await firstValueFrom(this.environmentService.environment$); const response = await this.fetch( - new Request(env.getIdentityUrl() + "/connect/token", { + this.httpOperations.createRequest(env.getIdentityUrl() + "/connect/token", { body: this.qsStringify(identityToken), credentials: await this.getCredentials(), cache: "no-store", @@ -1409,7 +1414,7 @@ export class ApiService implements ApiServiceAbstraction { } const env = await firstValueFrom(this.environmentService.environment$); const response = await this.fetch( - new Request(env.getEventsUrl() + "/collect", { + this.httpOperations.createRequest(env.getEventsUrl() + "/collect", { cache: "no-store", credentials: await this.getCredentials(), method: "POST", @@ -1456,7 +1461,7 @@ export class ApiService implements ApiServiceAbstraction { const authHeader = await this.getActiveBearerToken(); const response = await this.fetch( - new Request(keyConnectorUrl + "/user-keys", { + this.httpOperations.createRequest(keyConnectorUrl + "/user-keys", { cache: "no-store", method: "GET", headers: new Headers({ @@ -1481,7 +1486,7 @@ export class ApiService implements ApiServiceAbstraction { const authHeader = await this.getActiveBearerToken(); const response = await this.fetch( - new Request(keyConnectorUrl + "/user-keys", { + this.httpOperations.createRequest(keyConnectorUrl + "/user-keys", { cache: "no-store", method: "POST", headers: new Headers({ @@ -1501,7 +1506,7 @@ export class ApiService implements ApiServiceAbstraction { async getKeyConnectorAlive(keyConnectorUrl: string) { const response = await this.fetch( - new Request(keyConnectorUrl + "/alive", { + this.httpOperations.createRequest(keyConnectorUrl + "/alive", { cache: "no-store", method: "GET", headers: new Headers({ @@ -1570,7 +1575,7 @@ export class ApiService implements ApiServiceAbstraction { const env = await firstValueFrom(this.environmentService.environment$); const path = `/sso/prevalidate?domainHint=${encodeURIComponent(identifier)}`; const response = await this.fetch( - new Request(env.getIdentityUrl() + path, { + this.httpOperations.createRequest(env.getIdentityUrl() + path, { cache: "no-store", credentials: await this.getCredentials(), headers: headers, @@ -1711,7 +1716,7 @@ export class ApiService implements ApiServiceAbstraction { const env = await firstValueFrom(this.environmentService.environment$); const decodedToken = await this.tokenService.decodeAccessToken(); const response = await this.fetch( - new Request(env.getIdentityUrl() + "/connect/token", { + this.httpOperations.createRequest(env.getIdentityUrl() + "/connect/token", { body: this.qsStringify({ grant_type: "refresh_token", client_id: decodedToken.client_id, @@ -1820,7 +1825,7 @@ export class ApiService implements ApiServiceAbstraction { }; requestInit.headers = requestHeaders; requestInit.body = requestBody; - const response = await this.fetch(new Request(requestUrl, requestInit)); + const response = await this.fetch(this.httpOperations.createRequest(requestUrl, requestInit)); const responseType = response.headers.get("content-type"); const responseIsJson = responseType != null && responseType.indexOf("application/json") !== -1; @@ -1889,7 +1894,7 @@ export class ApiService implements ApiServiceAbstraction { let responseJson: any = null; if (this.isJsonResponse(response)) { responseJson = await response.json(); - } else if (this.isTextResponse(response)) { + } else if (this.isTextPlainResponse(response)) { responseJson = { Message: await response.text() }; } @@ -1945,8 +1950,8 @@ export class ApiService implements ApiServiceAbstraction { return typeHeader != null && typeHeader.indexOf("application/json") > -1; } - private isTextResponse(response: Response): boolean { + private isTextPlainResponse(response: Response): boolean { const typeHeader = response.headers.get("content-type"); - return typeHeader != null && typeHeader.indexOf("text") > -1; + return typeHeader != null && typeHeader.indexOf("text/plain") > -1; } } From 23d4f04b22d52a690de0f6e1ba0918bbcf142c0d Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Fri, 9 May 2025 17:51:34 -0700 Subject: [PATCH 27/36] set cipher form to partial edit for non edit permission (#14639) --- apps/desktop/src/vault/app/vault/vault-v2.component.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/desktop/src/vault/app/vault/vault-v2.component.ts b/apps/desktop/src/vault/app/vault/vault-v2.component.ts index 4da2db101ed..66e77580d1c 100644 --- a/apps/desktop/src/vault/app/vault/vault-v2.component.ts +++ b/apps/desktop/src/vault/app/vault/vault-v2.component.ts @@ -514,6 +514,9 @@ export class VaultV2Component implements OnInit, OnDestroy { this.cipherId = cipher.id; this.cipher = cipher; await this.buildFormConfig("edit"); + if (!cipher.edit && this.config) { + this.config.mode = "partial-edit"; + } this.action = "edit"; await this.go().catch(() => {}); } From 2282a74abda260dd21916c3e330409c2a3e181e8 Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Fri, 9 May 2025 18:09:26 -0700 Subject: [PATCH 28/36] [PM-21021] - fix toggled hidden field state for custom fields view (#14595) * fix toggled hidden field state for custom fields view * fix hidden field toggle for cards and login details --- .../card-details-view.component.html | 2 ++ .../card-details-view.component.ts | 19 +++++++++++++++++-- .../custom-fields-v2.component.ts | 10 ++++++++-- .../login-credentials-view.component.html | 1 + .../login-credentials-view.component.ts | 19 +++++++++++++++++-- 5 files changed, 45 insertions(+), 6 deletions(-) diff --git a/libs/vault/src/cipher-view/card-details/card-details-view.component.html b/libs/vault/src/cipher-view/card-details/card-details-view.component.html index fff771b6465..ff61addd7db 100644 --- a/libs/vault/src/cipher-view/card-details/card-details-view.component.html +++ b/libs/vault/src/cipher-view/card-details/card-details-view.component.html @@ -33,6 +33,7 @@ bitIconButton bitPasswordInputToggle data-testid="toggle-number" + [toggled]="revealCardNumber" (toggledChange)="logCardEvent($event, EventType.Cipher_ClientToggledCardNumberVisible)" > diff --git a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts index 27d81f32ee6..d99ac438f27 100644 --- a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts +++ b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts @@ -1,7 +1,15 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { CommonModule, DatePipe } from "@angular/common"; -import { Component, EventEmitter, inject, Input, Output } from "@angular/core"; +import { + Component, + EventEmitter, + inject, + Input, + OnChanges, + Output, + SimpleChanges, +} from "@angular/core"; import { Observable, switchMap } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; @@ -51,7 +59,7 @@ type TotpCodeValues = { LinkModule, ], }) -export class LoginCredentialsViewComponent { +export class LoginCredentialsViewComponent implements OnChanges { @Input() cipher: CipherView; @Input() activeUserId: UserId; @Input() hadPendingChangePasswordTask: boolean; @@ -85,6 +93,13 @@ export class LoginCredentialsViewComponent { return `${dateCreated} ${creationDate}`; } + ngOnChanges(changes: SimpleChanges): void { + if (changes["cipher"]) { + this.passwordRevealed = false; + this.showPasswordCount = false; + } + } + async getPremium(organizationId?: string) { await this.premiumUpgradeService.promptForPremium(organizationId); } From 5408a62b7df4631564601fb5fc056e718b6c74f9 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 12 May 2025 11:41:45 +0200 Subject: [PATCH 29/36] [PM-21001] Move KM usage of encrypt service (#14541) * Add new encrypt service functions * Undo changes * Cleanup * Fix build * Fix comments * Move KM usage of encrypt service * Fix build --- .../background/nativeMessaging.background.ts | 5 +-- .../biometric-message-handler.service.spec.ts | 8 ++-- .../biometric-message-handler.service.ts | 4 +- .../crypto/abstractions/encrypt.service.ts | 1 + .../device-trust.service.implementation.ts | 11 +++-- .../services/device-trust.service.spec.ts | 42 ++++++++++--------- .../services/master-password.service.ts | 16 ++----- libs/key-management/src/key.service.spec.ts | 20 +++++---- libs/key-management/src/key.service.ts | 5 +-- ...symmetric-key-regeneration.service.spec.ts | 3 ++ 10 files changed, 59 insertions(+), 56 deletions(-) diff --git a/apps/browser/src/background/nativeMessaging.background.ts b/apps/browser/src/background/nativeMessaging.background.ts index d92826765db..7172b98d727 100644 --- a/apps/browser/src/background/nativeMessaging.background.ts +++ b/apps/browser/src/background/nativeMessaging.background.ts @@ -357,7 +357,7 @@ export class NativeMessagingBackground { await this.secureCommunication(); } - return await this.encryptService.encrypt( + return await this.encryptService.encryptString( JSON.stringify(message), this.secureChannel!.sharedSecret!, ); @@ -401,10 +401,9 @@ export class NativeMessagingBackground { return; } message = JSON.parse( - await this.encryptService.decryptToUtf8( + await this.encryptService.decryptString( rawMessage as EncString, this.secureChannel.sharedSecret, - "ipc-desktop-ipc-channel-key", ), ); } else { diff --git a/apps/desktop/src/services/biometric-message-handler.service.spec.ts b/apps/desktop/src/services/biometric-message-handler.service.spec.ts index 9ddc3da8ed4..af18828b59d 100644 --- a/apps/desktop/src/services/biometric-message-handler.service.spec.ts +++ b/apps/desktop/src/services/biometric-message-handler.service.spec.ts @@ -347,7 +347,7 @@ describe("BiometricMessageHandlerService", () => { trusted: false, }), ); - encryptService.decryptToUtf8.mockResolvedValue( + encryptService.decryptString.mockResolvedValue( JSON.stringify({ command: "biometricUnlock", messageId: 0, @@ -382,7 +382,7 @@ describe("BiometricMessageHandlerService", () => { ngZone.run.mockReturnValue({ closed: of(true), }); - encryptService.decryptToUtf8.mockResolvedValue( + encryptService.decryptString.mockResolvedValue( JSON.stringify({ command: BiometricsCommands.UnlockWithBiometricsForUser, messageId: 0, @@ -433,7 +433,7 @@ describe("BiometricMessageHandlerService", () => { ngZone.run.mockReturnValue({ closed: of(false), }); - encryptService.decryptToUtf8.mockResolvedValue( + encryptService.decryptString.mockResolvedValue( JSON.stringify({ command: BiometricsCommands.UnlockWithBiometricsForUser, messageId: 0, @@ -480,7 +480,7 @@ describe("BiometricMessageHandlerService", () => { trusted: true, }), ); - encryptService.decryptToUtf8.mockResolvedValue( + encryptService.decryptString.mockResolvedValue( JSON.stringify({ command: BiometricsCommands.UnlockWithBiometricsForUser, messageId: 0, diff --git a/apps/desktop/src/services/biometric-message-handler.service.ts b/apps/desktop/src/services/biometric-message-handler.service.ts index 3851f40505b..42d7b8aae5f 100644 --- a/apps/desktop/src/services/biometric-message-handler.service.ts +++ b/apps/desktop/src/services/biometric-message-handler.service.ts @@ -175,7 +175,7 @@ export class BiometricMessageHandlerService { } const message: LegacyMessage = JSON.parse( - await this.encryptService.decryptToUtf8( + await this.encryptService.decryptString( rawMessage as EncString, SymmetricCryptoKey.fromString(sessionSecret), ), @@ -365,7 +365,7 @@ export class BiometricMessageHandlerService { throw new Error("Session secret is missing"); } - const encrypted = await this.encryptService.encrypt( + const encrypted = await this.encryptService.encryptString( JSON.stringify(message), SymmetricCryptoKey.fromString(sessionSecret), ); diff --git a/libs/common/src/key-management/crypto/abstractions/encrypt.service.ts b/libs/common/src/key-management/crypto/abstractions/encrypt.service.ts index 7a6c9bcd800..8bd58a21b6e 100644 --- a/libs/common/src/key-management/crypto/abstractions/encrypt.service.ts +++ b/libs/common/src/key-management/crypto/abstractions/encrypt.service.ts @@ -49,6 +49,7 @@ export abstract class EncryptService { key: SymmetricCryptoKey, decryptTrace?: string, ): Promise; + /** * @deprecated Replaced by BulkEncryptService, remove once the feature is tested and the featureflag PM-4154-multi-worker-encryption-service is removed * @param items The items to decrypt diff --git a/libs/common/src/key-management/device-trust/services/device-trust.service.implementation.ts b/libs/common/src/key-management/device-trust/services/device-trust.service.implementation.ts index 06999cab9c3..5e89e0a5cb7 100644 --- a/libs/common/src/key-management/device-trust/services/device-trust.service.implementation.ts +++ b/libs/common/src/key-management/device-trust/services/device-trust.service.implementation.ts @@ -209,7 +209,7 @@ export class DeviceTrustService implements DeviceTrustServiceAbstraction { devices.data .filter((device) => device.isTrusted) .map(async (device) => { - const publicKey = await this.encryptService.decryptToBytes( + const publicKey = await this.encryptService.unwrapEncapsulationKey( new EncString(device.encryptedPublicKey), oldUserKey, ); @@ -220,7 +220,10 @@ export class DeviceTrustService implements DeviceTrustServiceAbstraction { return null; } - const newEncryptedPublicKey = await this.encryptService.encrypt(publicKey, newUserKey); + const newEncryptedPublicKey = await this.encryptService.wrapEncapsulationKey( + publicKey, + newUserKey, + ); const newEncryptedUserKey = await this.encryptService.encapsulateKeyUnsigned( newUserKey, publicKey, @@ -278,7 +281,7 @@ export class DeviceTrustService implements DeviceTrustServiceAbstraction { const currentDeviceKeys = await this.devicesApiService.getDeviceKeys(deviceIdentifier); // Decrypt the existing device public key with the old user key - const decryptedDevicePublicKey = await this.encryptService.decryptToBytes( + const decryptedDevicePublicKey = await this.encryptService.unwrapEncapsulationKey( currentDeviceKeys.encryptedPublicKey, oldUserKey, ); @@ -394,7 +397,7 @@ export class DeviceTrustService implements DeviceTrustServiceAbstraction { try { // attempt to decrypt encryptedDevicePrivateKey with device key - const devicePrivateKey = await this.encryptService.decryptToBytes( + const devicePrivateKey = await this.encryptService.unwrapDecapsulationKey( encryptedDevicePrivateKey, deviceKey, ); diff --git a/libs/common/src/key-management/device-trust/services/device-trust.service.spec.ts b/libs/common/src/key-management/device-trust/services/device-trust.service.spec.ts index 7d4a25c1f08..de9de5d781a 100644 --- a/libs/common/src/key-management/device-trust/services/device-trust.service.spec.ts +++ b/libs/common/src/key-management/device-trust/services/device-trust.service.spec.ts @@ -623,9 +623,9 @@ describe("deviceTrustService", () => { }); it("successfully returns the user key when provided keys (including device key) can decrypt it", async () => { - const decryptToBytesSpy = jest - .spyOn(encryptService, "decryptToBytes") - .mockResolvedValue(new Uint8Array(userKeyBytesLength)); + const unwrapDecapsulationKeySpy = jest + .spyOn(encryptService, "unwrapDecapsulationKey") + .mockResolvedValue(new Uint8Array(2048)); const rsaDecryptSpy = jest .spyOn(encryptService, "decapsulateKeyUnsigned") .mockResolvedValue(new SymmetricCryptoKey(new Uint8Array(userKeyBytesLength))); @@ -638,13 +638,13 @@ describe("deviceTrustService", () => { ); expect(result).toEqual(mockUserKey); - expect(decryptToBytesSpy).toHaveBeenCalledTimes(1); + expect(unwrapDecapsulationKeySpy).toHaveBeenCalledTimes(1); expect(rsaDecryptSpy).toHaveBeenCalledTimes(1); }); it("returns null and removes device key when the decryption fails", async () => { - const decryptToBytesSpy = jest - .spyOn(encryptService, "decryptToBytes") + const unwrapDecapsulationKeySpy = jest + .spyOn(encryptService, "unwrapDecapsulationKey") .mockRejectedValue(new Error("Decryption error")); const setDeviceKeySpy = jest.spyOn(deviceTrustService as any, "setDeviceKey"); @@ -656,7 +656,7 @@ describe("deviceTrustService", () => { ); expect(result).toBeNull(); - expect(decryptToBytesSpy).toHaveBeenCalledTimes(1); + expect(unwrapDecapsulationKeySpy).toHaveBeenCalledTimes(1); expect(setDeviceKeySpy).toHaveBeenCalledTimes(1); expect(setDeviceKeySpy).toHaveBeenCalledWith(mockUserId, null); }); @@ -704,8 +704,8 @@ describe("deviceTrustService", () => { DeviceResponse, ), ); - encryptService.decryptToBytes.mockResolvedValue(null); - encryptService.encrypt.mockResolvedValue(new EncString("test_encrypted_data")); + encryptService.decryptBytes.mockResolvedValue(null); + encryptService.encryptString.mockResolvedValue(new EncString("test_encrypted_data")); encryptService.encapsulateKeyUnsigned.mockResolvedValue( new EncString("test_encrypted_data"), ); @@ -752,9 +752,11 @@ describe("deviceTrustService", () => { DeviceResponse, ), ); - encryptService.decryptToBytes.mockResolvedValue(new Uint8Array(64)); - encryptService.encrypt.mockResolvedValue(new EncString("test_encrypted_data")); - encryptService.rsaEncrypt.mockResolvedValue(new EncString("test_encrypted_data")); + encryptService.unwrapEncapsulationKey.mockResolvedValue(new Uint8Array(64)); + encryptService.wrapEncapsulationKey.mockResolvedValue(new EncString("test_encrypted_data")); + encryptService.encapsulateKeyUnsigned.mockResolvedValue( + new EncString("test_encrypted_data"), + ); const protectedDeviceResponse = new ProtectedDeviceResponse({ id: "", @@ -862,13 +864,15 @@ describe("deviceTrustService", () => { }); // Mock the decryption of the public key with the old user key - encryptService.decryptToBytes.mockImplementationOnce((_encValue, privateKeyValue) => { - expect(privateKeyValue.inner().type).toBe(EncryptionType.AesCbc256_HmacSha256_B64); - expect(new Uint8Array(privateKeyValue.toEncoded())[0]).toBe(FakeOldUserKeyMarker); - const data = new Uint8Array(250); - data.fill(FakeDecryptedPublicKeyMarker, 0, 1); - return Promise.resolve(data); - }); + encryptService.unwrapEncapsulationKey.mockImplementationOnce( + (_encValue, privateKeyValue) => { + expect(privateKeyValue.inner().type).toBe(EncryptionType.AesCbc256_HmacSha256_B64); + expect(new Uint8Array(privateKeyValue.toEncoded())[0]).toBe(FakeOldUserKeyMarker); + const data = new Uint8Array(250); + data.fill(FakeDecryptedPublicKeyMarker, 0, 1); + return Promise.resolve(data); + }, + ); // Mock the encryption of the new user key with the decrypted public key encryptService.encapsulateKeyUnsigned.mockImplementationOnce((data, publicKey) => { diff --git a/libs/common/src/key-management/master-password/services/master-password.service.ts b/libs/common/src/key-management/master-password/services/master-password.service.ts index 72b18d8bfba..b9b11d6cbe8 100644 --- a/libs/common/src/key-management/master-password/services/master-password.service.ts +++ b/libs/common/src/key-management/master-password/services/master-password.service.ts @@ -174,21 +174,13 @@ export class MasterPasswordService implements InternalMasterPasswordServiceAbstr throw new Error("No master key found."); } - let decUserKey: Uint8Array; + let decUserKey: SymmetricCryptoKey; if (userKey.encryptionType === EncryptionType.AesCbc256_B64) { - decUserKey = await this.encryptService.decryptToBytes( - userKey, - masterKey, - "Content: User Key; Encrypting Key: Master Key", - ); + decUserKey = await this.encryptService.unwrapSymmetricKey(userKey, masterKey); } else if (userKey.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) { const newKey = await this.keyGenerationService.stretchKey(masterKey); - decUserKey = await this.encryptService.decryptToBytes( - userKey, - newKey, - "Content: User Key; Encrypting Key: Stretched Master Key", - ); + decUserKey = await this.encryptService.unwrapSymmetricKey(userKey, newKey); } else { throw new Error("Unsupported encryption type."); } @@ -198,6 +190,6 @@ export class MasterPasswordService implements InternalMasterPasswordServiceAbstr return null; } - return new SymmetricCryptoKey(decUserKey) as UserKey; + return decUserKey as UserKey; } } diff --git a/libs/key-management/src/key.service.spec.ts b/libs/key-management/src/key.service.spec.ts index 57291462924..25d8aff99fb 100644 --- a/libs/key-management/src/key.service.spec.ts +++ b/libs/key-management/src/key.service.spec.ts @@ -330,7 +330,7 @@ describe("keyService", () => { everHadUserKeyState.nextState(null); // Mock private key decryption - encryptService.decryptToBytes.mockResolvedValue(mockRandomBytes); + encryptService.unwrapDecapsulationKey.mockResolvedValue(mockRandomBytes); }); it("throws if userKey is null", async () => { @@ -352,7 +352,7 @@ describe("keyService", () => { }); it("throws if encPrivateKey cannot be decrypted with the userKey", async () => { - encryptService.decryptToBytes.mockResolvedValue(null); + encryptService.unwrapDecapsulationKey.mockResolvedValue(null); await expect( keyService.setUserKeys(mockUserKey, mockEncPrivateKey, mockUserId), @@ -452,17 +452,16 @@ describe("keyService", () => { // Decryption of the user private key const fakeDecryptedUserPrivateKey = makeStaticByteArray(10, 1); - encryptService.decryptToBytes.mockResolvedValue(fakeDecryptedUserPrivateKey); + encryptService.unwrapDecapsulationKey.mockResolvedValue(fakeDecryptedUserPrivateKey); const fakeUserPublicKey = makeStaticByteArray(10, 2); cryptoFunctionService.rsaExtractPublicKey.mockResolvedValue(fakeUserPublicKey); const userPrivateKey = await firstValueFrom(keyService.userPrivateKey$(mockUserId)); - expect(encryptService.decryptToBytes).toHaveBeenCalledWith( + expect(encryptService.unwrapDecapsulationKey).toHaveBeenCalledWith( fakeEncryptedUserPrivateKey, userKey, - "Content: Encrypted Private Key", ); expect(userPrivateKey).toBe(fakeDecryptedUserPrivateKey); @@ -473,7 +472,7 @@ describe("keyService", () => { const userPrivateKey = await firstValueFrom(keyService.userPrivateKey$(mockUserId)); - expect(encryptService.decryptToBytes).not.toHaveBeenCalled(); + expect(encryptService.unwrapDecapsulationKey).not.toHaveBeenCalled(); expect(userPrivateKey).toBeFalsy(); }); @@ -552,10 +551,12 @@ describe("keyService", () => { providerKeysState.nextState(keys.providerKeys!); } - encryptService.decryptToBytes.mockImplementation((encryptedPrivateKey, userKey) => { - // TOOD: Branch between provider and private key? + encryptService.unwrapDecapsulationKey.mockImplementation((encryptedPrivateKey, userKey) => { return Promise.resolve(fakePrivateKeyDecryption(encryptedPrivateKey, userKey)); }); + encryptService.unwrapSymmetricKey.mockImplementation((encryptedPrivateKey, userKey) => { + return Promise.resolve(new SymmetricCryptoKey(new Uint8Array(64))); + }); encryptService.decapsulateKeyUnsigned.mockImplementation((data, privateKey) => { return Promise.resolve(new SymmetricCryptoKey(fakeOrgKeyDecryption(data, privateKey))); @@ -617,6 +618,7 @@ describe("keyService", () => { }); it("returns decryption keys when some of the org keys are providers", async () => { + encryptService.decryptToBytes.mockResolvedValue(new Uint8Array(64)); const org2Id = "org2Id" as OrganizationId; updateKeys({ userKey: makeSymmetricCryptoKey(64), @@ -647,7 +649,7 @@ describe("keyService", () => { const org2Key = decryptionKeys!.orgKeys![org2Id]; expect(org2Key).not.toBeNull(); - expect(org2Key.keyB64).toContain("provider1Key"); + expect(org2Key.toEncoded()).toHaveLength(64); }); it("returns a stream that pays attention to updates of all data", async () => { diff --git a/libs/key-management/src/key.service.ts b/libs/key-management/src/key.service.ts index 01e7b713e1b..849b9db6a50 100644 --- a/libs/key-management/src/key.service.ts +++ b/libs/key-management/src/key.service.ts @@ -738,7 +738,7 @@ export class DefaultKeyService implements KeyServiceAbstraction { const storePin = await this.shouldStoreKey(KeySuffixOptions.Pin, userId); if (storePin) { // Decrypt userKeyEncryptedPin with user key - const pin = await this.encryptService.decryptToUtf8( + const pin = await this.encryptService.decryptString( (await this.pinService.getUserKeyEncryptedPin(userId))!, key, ); @@ -945,10 +945,9 @@ export class DefaultKeyService implements KeyServiceAbstraction { return null; } - return (await this.encryptService.decryptToBytes( + return (await this.encryptService.unwrapDecapsulationKey( new EncString(encryptedPrivateKey), key, - "Content: Encrypted Private Key", )) as UserPrivateKey; } diff --git a/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.spec.ts b/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.spec.ts index 8e2ce8ab6b9..35cef914588 100644 --- a/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.spec.ts +++ b/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.spec.ts @@ -58,6 +58,9 @@ function setupUserKeyValidation( cipher.notes = mockEnc("EncryptedString"); cipher.key = mockEnc("EncKey"); cipherService.getAll.mockResolvedValue([cipher]); + encryptService.unwrapSymmetricKey.mockResolvedValue( + new SymmetricCryptoKey(makeStaticByteArray(64)), + ); encryptService.decryptToBytes.mockResolvedValue(makeStaticByteArray(64)); encryptService.decryptString.mockResolvedValue("mockDecryptedString"); (window as any).bitwardenContainerService = new ContainerService(keyService, encryptService); From fcaf5e63c5e8a54dc3c65d0cb16c9c6f26379bfe Mon Sep 17 00:00:00 2001 From: Matt Andreko Date: Mon, 12 May 2025 07:56:50 -0400 Subject: [PATCH 30/36] Duo URL redirect enhancements (#14640) * Provide additional scrutiny on Duo redirect filtering * Address review feedback from Jared * Add documentation to redirectToDuoFrameless method --- apps/web/src/connectors/duo-redirect.spec.ts | 46 ++++++++++++++++++-- apps/web/src/connectors/duo-redirect.ts | 39 ++++++++++++----- 2 files changed, 71 insertions(+), 14 deletions(-) diff --git a/apps/web/src/connectors/duo-redirect.spec.ts b/apps/web/src/connectors/duo-redirect.spec.ts index c0498861ba0..85953a5dd00 100644 --- a/apps/web/src/connectors/duo-redirect.spec.ts +++ b/apps/web/src/connectors/duo-redirect.spec.ts @@ -10,13 +10,13 @@ describe("duo-redirect", () => { }); it("should redirect to a valid Duo URL", () => { - const validUrl = "https://api-123.duosecurity.com/auth"; + const validUrl = "https://api-123.duosecurity.com/oauth/v1/authorize"; redirectToDuoFrameless(validUrl); expect(window.location.href).toBe(validUrl); }); it("should redirect to a valid Duo Federal URL", () => { - const validUrl = "https://api-123.duofederal.com/auth"; + const validUrl = "https://api-123.duofederal.com/oauth/v1/authorize"; redirectToDuoFrameless(validUrl); expect(window.location.href).toBe(validUrl); }); @@ -27,15 +27,55 @@ describe("duo-redirect", () => { }); it("should throw an error for an malicious URL with valid redirect embedded", () => { - const invalidUrl = "https://malicious-site.com\\@api-123.duosecurity.com/auth"; + const invalidUrl = "https://malicious-site.com\\@api-123.duosecurity.com/oauth/v1/authorize"; expect(() => redirectToDuoFrameless(invalidUrl)).toThrow("Invalid redirect URL"); }); + it("should throw an error for a URL with a malicious subdomain", () => { + const maliciousSubdomainUrl = + "https://api-a86d5bde.duosecurity.com.evil.com/oauth/v1/authorize"; + expect(() => redirectToDuoFrameless(maliciousSubdomainUrl)).toThrow("Invalid redirect URL"); + }); + + it("should throw an error for a URL using HTTP protocol", () => { + const maliciousSubdomainUrl = "http://api-a86d5bde.duosecurity.com/oauth/v1/authorize"; + expect(() => redirectToDuoFrameless(maliciousSubdomainUrl)).toThrow( + "Invalid redirect URL: invalid protocol", + ); + }); + + it("should throw an error for a URL with javascript code", () => { + const maliciousSubdomainUrl = "javascript://https://api-a86d5bde.duosecurity.com%0Aalert(1)"; + expect(() => redirectToDuoFrameless(maliciousSubdomainUrl)).toThrow( + "Invalid redirect URL: invalid protocol", + ); + }); + it("should throw an error for a non-HTTPS URL", () => { const nonHttpsUrl = "http://api-123.duosecurity.com/auth"; expect(() => redirectToDuoFrameless(nonHttpsUrl)).toThrow("Invalid redirect URL"); }); + it("should throw an error for a URL with invalid port specified", () => { + const urlWithPort = "https://api-123.duyosecurity.com:8080/auth"; + expect(() => redirectToDuoFrameless(urlWithPort)).toThrow( + "Invalid redirect URL: port not allowed", + ); + }); + + it("should redirect to a valid Duo Federal URL with valid port", () => { + const validUrl = "https://api-123.duofederal.com:443/oauth/v1/authorize"; + redirectToDuoFrameless(validUrl); + expect(window.location.href).toBe(validUrl); + }); + + it("should throw an error for a URL with an invalid pathname", () => { + const urlWithPort = "https://api-123.duyosecurity.com/../evil/path/here/"; + expect(() => redirectToDuoFrameless(urlWithPort)).toThrow( + "Invalid redirect URL: invalid pathname", + ); + }); + it("should throw an error for a URL with an invalid hostname", () => { const invalidHostnameUrl = "https://api-123.invalid.com"; expect(() => redirectToDuoFrameless(invalidHostnameUrl)).toThrow("Invalid redirect URL"); diff --git a/apps/web/src/connectors/duo-redirect.ts b/apps/web/src/connectors/duo-redirect.ts index d1841247962..5389b31f6af 100644 --- a/apps/web/src/connectors/duo-redirect.ts +++ b/apps/web/src/connectors/duo-redirect.ts @@ -57,29 +57,46 @@ window.addEventListener("load", async () => { * @param redirectUrl the duo auth url */ export function redirectToDuoFrameless(redirectUrl: string) { - // Regex to match a valid duo redirect URL + // Validation for Duo redirect URL to prevent open redirect or XSS vulnerabilities + // Only used for Duo 2FA redirects in the extension /** * This regex checks for the following: - * The string must start with "https://api-" - * Followed by a subdomain that can contain letters, numbers + * The hostname must start with a subdomain that begins with "api-" followed by a + * string that can contain letters or numbers of indeterminate length * Followed by either "duosecurity.com" or "duofederal.com" * This ensures that the redirect does not contain any malicious content * and is a valid Duo URL. * */ - const duoRedirectUrlRegex = /^https:\/\/api-[a-zA-Z0-9]+\.(duosecurity|duofederal)\.com/; - // Check if the redirect URL matches the regex - if (!duoRedirectUrlRegex.test(redirectUrl)) { - throw new Error("Invalid redirect URL"); - } - // At this point we know the URL to be valid, but we need to check for embedded credentials + const duoRedirectUrlRegex = /^api-[a-zA-Z0-9]+\.(duosecurity|duofederal)\.com$/; const validateUrl = new URL(redirectUrl); - // URLs should not contain + // Check that no embedded credentials are present if (validateUrl.username || validateUrl.password) { throw new Error("Invalid redirect URL: embedded credentials not allowed"); } - window.location.href = decodeURIComponent(redirectUrl); + // Check that the protocol is HTTPS + if (validateUrl.protocol !== "https:") { + throw new Error("Invalid redirect URL: invalid protocol"); + } + + // Check that the port is not specified + if (validateUrl.port && validateUrl.port !== "443") { + throw new Error("Invalid redirect URL: port not allowed"); + } + + if (validateUrl.pathname !== "/oauth/v1/authorize") { + throw new Error("Invalid redirect URL: invalid pathname"); + } + + // Check if the redirect hostname matches the regex + // Only check the hostname part of the URL to avoid over-zealous Regex expressions from matching + // and causing an Open Redirect vulnerability. Always use hostname instead of host, because host includes port if specified. + if (!duoRedirectUrlRegex.test(validateUrl.hostname)) { + throw new Error("Invalid redirect URL"); + } + + window.location.href = redirectUrl; } /** From 4d15f2d43cbd79ac29b35c8e8e3244ecb59ad8e4 Mon Sep 17 00:00:00 2001 From: Bryan Cunningham Date: Mon, 12 May 2025 09:00:01 -0400 Subject: [PATCH 31/36] [PM-16057] use Roboto as primary font (#14553) * swap to using roboto variable font --- .../content/components/constants/styles.ts | 6 +++--- .../notification/confirmation/message.ts | 2 +- .../components/notification/header-message.ts | 2 +- .../src/autofill/shared/styles/variables.scss | 2 +- apps/browser/src/popup/images/loading.svg | 2 +- apps/browser/src/popup/scss/variables.scss | 2 +- .../src/app/components/avatar.component.ts | 2 +- apps/desktop/src/images/loading.svg | 2 +- apps/desktop/src/scss/variables.scss | 2 +- .../src/app/billing/services/stripe.service.ts | 2 +- apps/web/src/images/loading-white.svg | 2 +- apps/web/src/images/loading.svg | 2 +- apps/web/src/scss/variables.scss | 2 +- libs/angular/src/scss/webfonts.css | 6 +++--- libs/angular/src/scss/webfonts/dm-sans.woff2 | Bin 88504 -> 0 bytes libs/angular/src/scss/webfonts/roboto.woff2 | Bin 0 -> 209484 bytes libs/components/src/avatar/avatar.component.ts | 2 +- libs/components/src/variables.scss | 2 +- 18 files changed, 20 insertions(+), 20 deletions(-) delete mode 100644 libs/angular/src/scss/webfonts/dm-sans.woff2 create mode 100644 libs/angular/src/scss/webfonts/roboto.woff2 diff --git a/apps/browser/src/autofill/content/components/constants/styles.ts b/apps/browser/src/autofill/content/components/constants/styles.ts index f7c9ffd4d92..08c8671ce14 100644 --- a/apps/browser/src/autofill/content/components/constants/styles.ts +++ b/apps/browser/src/autofill/content/components/constants/styles.ts @@ -144,17 +144,17 @@ export const border = { export const typography = { body1: ` line-height: 24px; - font-family: "DM Sans", sans-serif; + font-family: Roboto, sans-serif; font-size: 16px; `, body2: ` line-height: 20px; - font-family: "DM Sans", sans-serif; + font-family: Roboto, sans-serif; font-size: 14px; `, helperMedium: ` line-height: 16px; - font-family: "DM Sans", sans-serif; + font-family: Roboto, sans-serif; font-size: 12px; `, }; diff --git a/apps/browser/src/autofill/content/components/notification/confirmation/message.ts b/apps/browser/src/autofill/content/components/notification/confirmation/message.ts index 521fdf45291..527119aed15 100644 --- a/apps/browser/src/autofill/content/components/notification/confirmation/message.ts +++ b/apps/browser/src/autofill/content/components/notification/confirmation/message.ts @@ -72,7 +72,7 @@ const baseTextStyles = css` text-align: left; text-overflow: ellipsis; line-height: 24px; - font-family: "DM Sans", sans-serif; + font-family: Roboto, sans-serif; font-size: 16px; `; diff --git a/apps/browser/src/autofill/content/components/notification/header-message.ts b/apps/browser/src/autofill/content/components/notification/header-message.ts index ccfa58b8970..47fe8cd2828 100644 --- a/apps/browser/src/autofill/content/components/notification/header-message.ts +++ b/apps/browser/src/autofill/content/components/notification/header-message.ts @@ -19,7 +19,7 @@ const notificationHeaderMessageStyles = (theme: Theme) => css` line-height: 28px; white-space: nowrap; color: ${themes[theme].text.main}; - font-family: "DM Sans", sans-serif; + font-family: Roboto, sans-serif; font-size: 18px; font-weight: 600; `; diff --git a/apps/browser/src/autofill/shared/styles/variables.scss b/apps/browser/src/autofill/shared/styles/variables.scss index ae6a060798a..1e804ed8fd2 100644 --- a/apps/browser/src/autofill/shared/styles/variables.scss +++ b/apps/browser/src/autofill/shared/styles/variables.scss @@ -1,6 +1,6 @@ $dark-icon-themes: "theme_dark"; -$font-family-sans-serif: "DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +$font-family-sans-serif: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; $font-family-source-code-pro: "Source Code Pro", monospace; $font-size-base: 14px; diff --git a/apps/browser/src/popup/images/loading.svg b/apps/browser/src/popup/images/loading.svg index 3f2033303db..5f4102a5921 100644 --- a/apps/browser/src/popup/images/loading.svg +++ b/apps/browser/src/popup/images/loading.svg @@ -1,5 +1,5 @@  - Loading... diff --git a/apps/browser/src/popup/scss/variables.scss b/apps/browser/src/popup/scss/variables.scss index b78f06f2f3f..aea69e26436 100644 --- a/apps/browser/src/popup/scss/variables.scss +++ b/apps/browser/src/popup/scss/variables.scss @@ -1,6 +1,6 @@ $dark-icon-themes: "theme_dark"; -$font-family-sans-serif: "DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +$font-family-sans-serif: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace; $font-size-base: 16px; $font-size-large: 18px; diff --git a/apps/desktop/src/app/components/avatar.component.ts b/apps/desktop/src/app/components/avatar.component.ts index 87db2e4b6af..d2660763667 100644 --- a/apps/desktop/src/app/components/avatar.component.ts +++ b/apps/desktop/src/app/components/avatar.component.ts @@ -113,7 +113,7 @@ export class AvatarComponent implements OnChanges, OnInit { textTag.setAttribute("fill", Utils.pickTextColorBasedOnBgColor(color, 135, true)); textTag.setAttribute( "font-family", - '"DM Sans","Helvetica Neue",Helvetica,Arial,' + + 'Roboto,"Helvetica Neue",Helvetica,Arial,' + 'sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"', ); textTag.textContent = character; diff --git a/apps/desktop/src/images/loading.svg b/apps/desktop/src/images/loading.svg index 3f2033303db..5f4102a5921 100644 --- a/apps/desktop/src/images/loading.svg +++ b/apps/desktop/src/images/loading.svg @@ -1,5 +1,5 @@  - Loading... diff --git a/apps/desktop/src/scss/variables.scss b/apps/desktop/src/scss/variables.scss index b8978e284e5..b094be63f8c 100644 --- a/apps/desktop/src/scss/variables.scss +++ b/apps/desktop/src/scss/variables.scss @@ -1,6 +1,6 @@ $dark-icon-themes: "theme_dark"; -$font-family-sans-serif: "DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +$font-family-sans-serif: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; $font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace; $font-size-base: 14px; $font-size-large: 18px; diff --git a/apps/web/src/app/billing/services/stripe.service.ts b/apps/web/src/app/billing/services/stripe.service.ts index 5c35923c1f4..360187ecd1e 100644 --- a/apps/web/src/app/billing/services/stripe.service.ts +++ b/apps/web/src/app/billing/services/stripe.service.ts @@ -148,7 +148,7 @@ export class StripeService { base: { color: null, fontFamily: - '"DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif, ' + + 'Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif, ' + '"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"', fontSize: "16px", fontSmoothing: "antialiased", diff --git a/apps/web/src/images/loading-white.svg b/apps/web/src/images/loading-white.svg index 2bebff7daba..ef5970da42e 100644 --- a/apps/web/src/images/loading-white.svg +++ b/apps/web/src/images/loading-white.svg @@ -1,5 +1,5 @@  - Loading... diff --git a/apps/web/src/images/loading.svg b/apps/web/src/images/loading.svg index 3f2033303db..5f4102a5921 100644 --- a/apps/web/src/images/loading.svg +++ b/apps/web/src/images/loading.svg @@ -1,5 +1,5 @@  - Loading... diff --git a/apps/web/src/scss/variables.scss b/apps/web/src/scss/variables.scss index 4b023e12746..66773999c54 100644 --- a/apps/web/src/scss/variables.scss +++ b/apps/web/src/scss/variables.scss @@ -21,7 +21,7 @@ $body-bg: $white; $body-color: #333333; $font-family-sans-serif: - "DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; $h1-font-size: 1.7rem; diff --git a/libs/angular/src/scss/webfonts.css b/libs/angular/src/scss/webfonts.css index 04b072e1bf1..cd35271bf80 100644 --- a/libs/angular/src/scss/webfonts.css +++ b/libs/angular/src/scss/webfonts.css @@ -1,8 +1,8 @@ @font-face { - font-family: "DM Sans"; + font-family: Roboto; src: - url("webfonts/dm-sans.woff2") format("woff2 supports variations"), - url("webfonts/dm-sans.woff2") format("woff2-variations"); + url("webfonts/roboto.woff2") format("woff2 supports variations"), + url("webfonts/roboto.woff2") format("woff2-variations"); font-display: swap; font-weight: 100 900; } diff --git a/libs/angular/src/scss/webfonts/dm-sans.woff2 b/libs/angular/src/scss/webfonts/dm-sans.woff2 deleted file mode 100644 index 2375279dbf5a47d05c9b3364961a1f2d768b78cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88504 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�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�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 B`$zx) diff --git a/libs/angular/src/scss/webfonts/roboto.woff2 b/libs/angular/src/scss/webfonts/roboto.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..af8d2343d9c7d72c6fcbf7ffe127d0cc9f3e696c GIT binary patch literal 209484 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ÐsYdU(fae{({R20tCW*3Fgqz#7O68cmxw||I3Ld@AvsWww3-TG(HK| z82bf6RDtuNoMgIde}i>LEQY|2#ml!9FD^`He;aU2v+p7>M3X1 zA-iyos%`t!+lSUiVZb_r#CPX@l+mRvRLJQ(AXgGdUf`~m`)ZZyA!VWUch8P%f&6={ z)X`ChDNC)lB6HjcP}?e@Bi7#fV_D7C#caWAUM0he3B?Xs$eAI(L((1xT!Bk-j_et^ zXt?(%l30YhDm%qYC%lAj17j1gh&SN%TloF1ZBKZacwcQx&^8VcN8Omp_1d)4HzRf~ zGE4k%OmkDb?P13=|Myr~wri5R`Q2J`%`?N}L6`@5{Epn4=#2O_(_b;G&6FsUPSGK| zo6%@-mdw+)bxiVxXfgrU8M_X2(TT@eWdSGXD>CaFX=W;lVTj^4$k>^K?uf;|VX|Vn zW3l`ymmY8W`CUu!5?q*{uY4wQaZ_@IJpVuKoP%T9{^KR^1kIsc?xIr^YTh*~XNg+9 zk(eOF`-UhxyGqk{c*-1C^0lNccnu;XlC^Fal@jthe8a~gOqdTk%^Yv z(PNNV4PpISfaKSzirC5cAaB)d4_YSSKk#I{vyRYoiE2Pw-kxB=6-LNH2BWm8nSIRG zE@hJ2lexHG4~uMlS=_@s77BsBZnZt!VDplUDlifo1M^3r%P^T(p5P@1*%HaYvuEYg z%Hc-kpvq2`TryP8OXj?cws?kqn*s|!1sSh>KxGtyOXh@^q6!Tg#HPeaSM8H{i~Pud zg#+VH&CK{k-DL1YlUte<20eqJVlye$jKdh*1zV}+k#H+|qO4g7y%nNj&N9SI#f%-0 zjNsgs@UYO#^G-Km3}1pD0QDE4j91~MMy5)_Xld4w5+7mBF7^CnSfOf;2cvueniHYr zSHcRWM7R*2`I4Ehyj5j!$(rzbZyNeAvLtWFiQ=sx0K>MRrW}wzVGl*u3p>WNe==Bo z#2KnlS!15|$YDD?R`WJHFBm#c@JcuN!n}gyE$c|7%1MRRYrY+$^-PB5c`J>k-&Pf) z7TpW6*ny#sg4DCZX-zwz0d;H(!jePsllVMZT@L+0WgG7Ag%B7xoNAR)gbn<2PLg zn*BW9lxfd9DT&7ku1-V}OPX${km?ExItTaX7uz{%oiK|CPky+F_Ahr+z|6_a71@?$ z1>Ums^xoXC^~G21UQs$%uQhAf_=w9MMR7K)_^-|?z6|JdZ_9(L`p!M2Ci+LO1O!wC zToNpU5(_8%>%;rC8xZiADIvAscCclLO&j=^92=fiPx=Y-0ev2qEa=T_d`4<(=|SLeQkN zND0*#k^IWa#eF?bpOz8c=#Baljb=CL)2d# zkW6xfvWHt}hA5{PY@13XlT2FuoD0cfp*Za0VKX#)iEuA2dJsivkNchNsJ4e+T|;w4 z*f+BDyX<8``hKN0F0{Jb_TN;CrCOLYuoykV%NE>kIE%SUfy0M1u7+WsuxiG=ZZr0# zb001jim$HSx-Q6-9Ta|N* z1fdmHbnvX2RjiapLaCCzhTE4y$`Hxau(~%{NS;6poBI<*R)t3;{c*K~uXg$-Ik#vt zE^Ng``{bAwR^d7!0OZDn6UvO+!FJ++(l%P-exUH=Oip%OA}Lt<=3;f;GLp49iQhx` z*BP!8gWj|CU)tO?8N!VLy0}=4dSf$JQ`H@yU^_w$QLJzfQjnbvx!o2=`E-M1Dz?FR z2eom}ov4(}WFh^Oa#E{U9pE#rjU_eh8QkAy~IJr zSf#1D7DRXlZ*hM@zGWmY!+mM0aI`EYu!o_m=%9bbqlRKessx>R+B_dR?_dc5C9G%bC?NFOkVH%VJG%LCgz% zSAg#xVaV!SZiQ%qilug{YuZL(+97dfWV{vk7nd=m;Wxy>tCe-imT(eZ7c>!$=xteg zORA+r$AzI{r{;OquwBfD*)X!lu23vQ0%Sou0~ek;}M$ok_04SjOvOLaN4(F9ZVY-_|q3> zcKH_lZGLwucc2!?4iWEenkQ{hN7o*Z03{!Cd;=X z&ch^5s1-k3kri>|o8lQ+@*<5%zomMW6lgV}mx39_-pLOfI$LzCXbr}y8*El*NzYre z^X6J!AHY&Puk4~Buj7&7f-LMjH78a%1$p(!0+&*da0~{bgTo9PU?{H$wV)yZyg)b% zhwwl=;4|c8*@6ylN&F3({9yT`dzK+EOnvn&-M6wM?@i~^;|up}n(j5SD+k2RCqT|}=mp2^J1Ho3yG&Kw3_XnxR!j7gjwzGM%QkhFR<2s4ux=c12G%BCot{%b-tn*rxAM*6ArZtA z`1%BKVE9f9?{@DC&1!KE-~j6Ja_KVt#iEN=!agm#P;fhLX6Y!q0c|N%lV1(AsE~p$IT| zIV6A^cVn<=_j&focgJGT_pE|rI;HFG9}ix;4}kNmE!B!AD5Jy}cBl}Bf`)A2tlT^q zl3SIHZYNsFgYnZ<@ftcUO~9AbF0Hl@T)Hew3-9+CPx;Ht#;acXY4UC0jn-p*ouF45 zvQ=K+Gk^d|+xZNe9B5{WMO+J<9c47Lr2-IW#O^W3bUjH5iE!AEq>!>8DEA;t#d*Z} z1Rn5U9&wSOFW@|WE))wMqm1r6aQQf*CT3YK{LLKyfemGt?u_9IGf7miJelE;lZF6i z!&%UUGx5#%N+b2-$`fEz=Wt0C#6U&oh{r+=`-YJ|-Hc~hK4;<9i}my&$E~amH_!JN z@zx%J+%stJbGC!a4pQ2f4MrU8k)z&XY6Yc-YUgp+bIkIK1iZ}YiQaIZNKu@pP?gH8 zhuX6!E|O~u-%VtsSRJ%e>+(ylRfRN;QzxL681Mv0_}e}17DAcRls~d$7eTJ!q|jnv zyWP{fAYO+pW;bgz4~zHBN4=~b>78=0de$fQ2YD59Jo&0Y@4 zU3dssg6k?)d*(*zQ&&2syjIs`RWq7CauCP4q&1D0DvMbsRcn>_q|j2?%)6UYA!-jUR=RU|qzq27{D9+i8l)R#XAPXKE$z#eO|RaQF)C< zw!(J&m^0&w#S;kT`9M};^y0gCc2 zVv{!Zo@vv<73GQTWcb(M&O^02(^+kp(u`;nwi^(O%soi*&>m>a3Zf-9GjarM68<2% z81GQa3gePxOs|B+3}I?@qKa%+hBi_8P8tBSHA81D4~~M@I8dg}OY4g15t@b1{BHG@ z`YI2@*l@~K2=iJ)hl=T%=dT^FC&@Idf9FKt+Tp^PO$5XtCwP;_OGROl;M=>-=fGgF z*oYP}Ni4U(FZYte{toV%+BpS2HmK3`u|PLI@x$6~J(KCZscbv$2Jjni`sH1<+Dp}j z;o9u@2&q}wk@cZ>jz*fB{LNg}$xE(K_(?Xv!B1Cq5LEXVAdta!JQ;k>c-g@ZotbvE zG00aq7}S*}_u6j%)u?305Q;{#SE1?L9D`3xh}Cp1=WD$Zh+-hU#ZIQlH&eE8#?SJ4 z;fW(d_CRjTMS&#VkC4HRNW&tD3f;u^sy9rpv1qS)RI=iD&LFTB&fdpeB?2)QtrLGx zPKeqyj46xOSJ7F%o1nc}m>GAD92;3vuJ7V3GcScW1S&TwpS2ttd|-z8ykd)lW-;jT za4bE1fdxLOL;~9}mWiFXi@YQ%7|n4;9_~sMQ0Uq45|FbBcU@X)VPeoc1l_elH!;c0 zl57SV#PPK=AMS#e&?}S8Em&i+;sd^R&NiPwx(Z8vSU4NIBERV{fzJcn9WaD@;%z4T+^v(R)2%mZ~)=0y`1{uQO1bNA*e3M|k7%{^ zG(~Bg!5ESB31t7g9CrD5FHG)4`RE>w2y}Fr6Zb2LZ+3<|FA&PjDqc3#$nYgf!tPa! zDg!v}iq)tLE+(FrIF}m#6FpP7)-Szt;t4wRg^rL;qEGUg*dem7n&f zPczFk%{?;;)7*a>vyg>KHeEo8fUEi#$-q_i-K!<)qd|UBPYmEaWA;9BtFRf-BZ$n7 zoD*Zggup$^ut)3WxWC;cooFO{mI@Yb-Br?T>HR5Ksg%x};+&b9guuZfkubNB=_6LA zyIOt=S)ug8)*7QmZy`cr&=hMw%6aUcu)q^M7fC&caCAJx9ok!-%LyX-Be?q{u^=e( zqvem~Y2jsPp@18YgcWRSy|p7Gpn6TenItmjpwLnsrq%FL2#0!=linS)xab<+&e<|L zy3C67OdglQtE(zuqh;DvtS7lMv^A={qs)B5!ot(ZeuriX%7EO3?0{f<^}Rhz2vsV# zuraev#wt*>TQp2`mP7ywEG5{2(LvPA>$MU+#Uhb*mxATR6VT*#wlA;6VR5q17pXKl zW4P;v{UJfTb+FcODhgNpe0K=R`hvv;R-Ixw<{z2WLtTze)~+cL-&fR?{S1E3cTBn= zmbUElv_{>3ncHyS%-_HeQ4rC~3k7_DkMIFcxO;i3%uAB5Jkb{+{S6CmK+>rdxtV$9 ziSl;@p!X7d`O!eVLMtsh67l%q;oCR=kPegqpLZK=$;p%Ey;G)Oo(Hf_M@jLcL} zYNK#F?1$tDLkDliHAVMfFH2|9+^EzlkK+6{79HD;BTtVBs_u_3-t_$0#gBE>aPy*B zzf4B5{tqS7tw&1Fj#asSqxP!nPnTdGUbUlw;*b+Z6Oju~woZVyJ5K_yb1o7*-|!yT z=_puRVU=i-xF4IPgbc?Qy&Kg zdxxS3<(${?F(yf^JWR{~PoHV;OK)4E-|#GT`i1c(G=i#BgC7YIrbj3o9!<)g&qjIF z9%*GW!wU#cOm*vR6QhYDH1>)Yn|SHV;_#}RL+ytV#kT3K=-|pF%Tqn*r2KCahO>jt`ytxh05G4AHE~hhD2j%W29VJXy7?-)}+@i2wooPr2V5ch8=$^ zD(cC*^?4A0#m7{h0M>|D@Z0O*nT<{a0~N!%PSq_D(Tuw)7Ibh4v+H_!sF;Wfps#|g zMOqF}Bfzz#O?5(?rQVa!@l+7uH7n%0qm<|EG_%$`$w8zOmA2dOi$(o_&QUQO`*TL_y7D05mypl>g9TOAlG8us_N1gm`_y?hD&_yOrRNOgb8?S3 zNGU>r1i|hH$7dTa2{$R8W6i4X>5l`sZ(S?PI{$vDX_+-Ug zwP&_Q(KJqLfas)wb|lRwaY@^#Ow{OozRA&EI0^W^Q&Xx zM28T-us{;A*oH8WK=2N^kH_8CzQTi`MfAzfZWPRGyiP$^B8*`Nbj#-aew;b>B zEqUWiwn8}+TT%-_TjZM5q!7%eRhe)hUO^`~_ze|^KCykuhgWejvBcQ&{0331^dTY@ zz-aCsDzP9f<52(~_`o;Pw<-cZ>{+7m*ys4a{Qboi$4B39T?5w+NI(4^9I}Q_-5!5f zxdvFSArqp)xFGBqR}hXOqUYxu+wur9_z@cH?XE z{`QUAZ4e{T%EmBHO@u|LU!up6&(1kRqF738>o?wR$JZANPglfo${5A*iqd2x@MLjZ zZC=byWGZwM1k&0*pC~uup#XSUY)$UVNf$%Hs6Hps$`-p=o99ThKSFsz)<#91ekFJoY z9iE2Y!lU@f5yxLaD^-hD#vH*&knmmYn}u+p&~ZgmsdOr0K z8|O$5hC-}6Elfj-4r~3HiMyti>b;Rj3I%7|O`WY23OA{mfIGk^75PjmnJLz+3d|#c zAm@1&qfMa|vQD*}_s^CR&bt-+=J`08$|S>#51g(l=2g|n^0CHag<=IIg%kdfC~z6F>wyF zR%(Le-?&h^L?&@m50upEduff@vc+}U-_LbNc4FB&P5)I&0 zesh#efWFMOWc*GI#@~%E$_l}`_)yBL=a@BAG?|F|Ez-SsTUnfwY2MCLDmr7ol0Kk( z`>)}z_l<*-?0&!X)-y?D*p|}&MUz~&Ma_Py5Jk^uZFqsWDGJ8j>QNbe*>3m8((ZNX z5#HUX3Z43fL6;}Yyl83DyB9kv2wlTXvf4q_2%z!o*V1ASuoP%vAHAZ!^mtHOROSii zok!;=nc50yW}{yiUBL|`3H0~r-EFNhbzXC|k}7H`(uk4w19{TQ+53(iF!}6kIVTN{ zm#<2C9R3w5QVnN3yiP{wgS$tiVXBI{e2T3OU!6DR6Fo-J$Z;Gt5J-JF;%ZKs4`Wwn z4~~Ei%<=roWQ3yUN6I`=EL5>V%<7?ZwhF>qaaV`bIEy3r=+dKWd4I)p0RRb3JV~Gi z#|rE32VsynSzxlbG{9#OJTOyMe;fEk=0^$Lk(>S#cKR1A{eA;7n{N}Gub7fsoBTpz41?eIGM{QdZiZTbhb8NA zvG45m)!igK1KA*xmGkW3f^p@C9COM%fNszW!MM1nIndRkgj`cXi2e`#Uz}fRo<>MF z8PMQ@2rk2URq@m3(j&lrVLT@f1b=Vek@#4kmJi`k9okEczx(FW=@cH8z00>poI9m5 ziI6eDb0kfS$9P%GkFQR9ub@D<>v|+J-;z&`8q=+ZWa2Auyref|^XYJ}IaLemD zW?FJ^MY!bYN(gQ^ZYyetYKqlgn2Q9|`yK8WeYea|Fn&pG#P(VLst-Z5Jn>$xX-DxshTsMJm}qlV&g zJRw6DLkbqoJqe|J3xgsfiS?yu#H}yC9@SjcPFpu-+qhQJbwFRv^=DxRPM2a<_zeyO zeY&E;5v4nY92|p-gae<-h;rpbU3TQd_{i)MX)(UoRf~jv<~UQ`$+|DL0>4fJ7y7vkW>sW`J;*xE;-c+qSzf}?}5pViW_N$r<$*2!AMAC$oDs0wE9C38Hh z-%67ZPom805qAhaBHCiYfk1h4T4B`6(_aq1?$c~yt@(!j815Q&s0o&b)aGSEkjEp% z{5@oHO5W4hUQv4>)w>2y&y&EC88|`4Au&MsiuS6~Rs=s`2_o^TLFlYf)GeH~VWB3- z?u}c)hMKJ6k@V3fMKL2cBe+0Q*K5ZOkegy=t(wId>W>gkD1944j#jMA>jjcu$c69A z35bAf_Jnho0_%FN^+$;F>by>P#L#g|Z#$|eBEb=@=Wh-gAS;s1MI?vO%{-?}QhUwq z{w2q~+EsY(df&bj-apTw3Cy4UvO$)o02o)MGH)oFKvMRyk17X)M85r#sAnbHbkZ;> z6T|u=C-yb0PWlYTHBh0_JC})hSq|@|Q;Em(wSZgB;H{P3p6wFpjz>{y z4bo4sUVVcQyMFF}PmjZkwx^p?$A<`NCa}IDHb?k*j{}T?EzMD28%85)BY?5r;HHZN z#=ZyH`Kh+#8xTP+Zm0(~8M&e_26iiu8J>ufU3e3RxoxPnxvCdD+Dw08dYZTnjYy6= zeqNq59`6w!Mwv6IKaq}ZL|W>t?XWRA&4m34Jw)9NM!C(z*XV(f8Fj%(W`MQ`qOZY8 z4%I~UVt6HL%!G2xTQ5AuKWxTqUpoSBl!|T)y#$a7ZJ25xay!cU`!6IvwCO`1@B%B& z>Q{;tdes+y*H}2l>FU+UMZUD{UmsqUBe5SirOvq)JN*c9pr`MuwN1(VQn>wUE?jcwjpoz+_|P18Mz4#%k|?Ic{e2seMjnFSIEt2|J#D&|D6?QCAieScaxc0b|?&X(8bW z-l$KmkrJV+)e5}P>-o*!9y~67`2%G2*Hhw?19}=)d@y$9$vGx>{(-)ZvGGx!i;@dK zdJVD7UwZ&hMR-%SDMoN@Lhi_)XAR82NEB*lg7Y3s_XZ+k6arZ9FD<9 zARHR*6Pub$d! zC+m>~<)wPWb*FCXB;o;SDxx!?g_d%Cd!Z!=ltKi%ZL89>BkfLr0f7>tU0zh4(+uKZ z;6GNkPw1juI60DF+7#1?V2c>};UW-sjU0^*rWr73-$ROep9#s6z=guFk z+m^VmB%aLM1Cm5poeST(Vv~2@DB=y{_P(kFn4e=7_SI7Lwo$*1sesQ2p4fV7K>lpE z$;92ZRuId!X+%#TS}@Lrk0Zz2npLO!Eo!!?43C^j6S(hDn+pO)6ms-6!xDG1XcgFW zM;x6C5n@gVm-reCIKZYsy@Y8u6qpT91q6^)5!gp3cB=1rx~cH$Bgk)fH2MRlXnDwq zrdm<&xuUmnYmD#=!6P?w_tGI~#LPm{#xV)~N5aK`4p9h!f-AUk+u+DR?e4*!esu9r z;!m5J3fumF=;IbRfo)Qqnc*#8MvKlL0xiUT{PxASy@-7zkvMhH?0(z}^$HiiX)kGi zq}Bb$BgVHiDZu~s^{X5I>a*s1Mmm^tHoHRS|^N@u%KWvOFqw?4}w@;L4 zi^4S#cyZuOa2VL5iQYNFi9jQYSO_RxNRN0IJJ?YAWuE$OywHUb1abBVZaldnQkA-_ zcPJ)gr7qVi>F6gTlw;5sIy24nm$`=JF{5pR36NfoA(q_nnRPCBU!2HwN`Cx1*PMzJ zN*FQ8T91WSXo6>>OTNP$BjQ01N;xF6iWxRJnhqhseD$X%S+Zt-}+D3@j zElFfMOtUsJc~yj%Lv|y@_=2A!y2R0L2h$-pQKa9`%9F-Pw4%J861$Yn_eOYfY-MUY zaoG4-dFrIHvaWjZpI&k-skgMuA+`5(y+4AhRgrAFHR`t9iyK+3>S~TKGhPpy=E%+B zF0T^}BNCEtRy<$DXFu&e zZ(f&)EgZ^n+1x+E^NhmG3Rpstl6<^a8>ces6ehlWZJko$$zE5@0sr}z{yd@W+jdGz z&XEVB3YjI)0?CfKeMSEX6d?5<-T5^eP&T-zLN@#z-!VMQNf9tN-snm>-kZN>t47TKBt+dq@#u#{q zyf9eL74V(zbR?5Sq0SF3*w79AvtVdc8LKHc%rx~Z2s-(M%T>DVQcIW@59KfLNu#$j~%{5c=sBfmX;;6T-F2PUq^BJuli z8f10#xC$rYM7GOpmRJhdlaAuVKi*m=4=kC*Rc-&zNvHE5xu@yp9`0IV~ zd(@j|T&vb+xks+s-Q|P~CQEOG8^xm-SgkZ8PZYij2!gEfF2Z?jNA8&a5ExJP7GVS+=&6}rKPH-FuM!ANXzLy$( zO?%kl+&E#a*G_oxD$Mb{{U>kHYg2ky{mBW`UOy2zPye}FSD!_n`d#|l$J77`)oNVk z7?EDeKLrn+kcn5#TS4trw!4?-JJ;ARWku_Qz;$SDrT?t){igQSf; z_z0tXRCq{RqY@@{(+GM+XE=`-msX~0FD{NL+GkiE5uJFVyJetzMafG}UBET?gl2r* z8{_d|ixOz9vx}aqr{lF1)}N;vgYD^t8clWgqFc?KXf3!bx{b*U=vSw5|WF8bO1-|9O1#QX*Y0@))TamfA@ z*+^-7`dvgzW}1?<5w=nyhc;T4sd$sFLPD=zgPJcua zxz&9rDry)}))6G#E=??jCK)@xjwDFOfYGw|56R@t>I+d`umF-bnB#m$MZPG%xXp)8J~R+DsEhb zX4PbKuFJBVOST1>O_mP#zB2V8dGg7&&Y(cI8zFI(x@nudvJV;nX~Ox`J$szJmt*+< zbid}rKT}*V0-p77$hi-Wuu!sjv6R0pu^(8uN~zWhBsk--uY7Pgh10WGH5x(}1r}IP z2MbT)iA><%XTx*W06aj$zlngJLf`JP*V-H3+HS*>1d%|o%1V<(d$~>i!dt^IwCqQ` zp^SgguA%?0jZXW|Khn{G2DyP`(HpQ`8OkNswv}BR7KeH##1PcU+^QYkc%vzrx~m(* z4W+8`3K3}Hv%qasi2|e~_)W3g8*kVd}}PP5No8?&d|ogCv5_D4QTY zMT^lT3n_|o`PhW~+$-B;t)!DF#5e0ru=WI4}cV=S<0KXRF0*BLoO*#CtzuPak zQE5!4bp<~W+veD|ps`>4i$egZqkB?){ztC@YcMrqYKzS)qI~;_1!2$hvd7Xkx{{jY zx+ozAF+2mF!COtBGKAKUzycr{WINX&t7mwUs7O1dwNCBOgd`;KByPTf&g$v!sVg2g zYWGw4F<3bOZ7=G;`<`A#eb-0?7~pr!Xc|*Dq&n;6yEhjXx32t)>-bk=fMl}i?g@l( zjeA$!xW($Wh#+%5z+W*-#;_{9$1JnlQZy0qyUyE74n|F_ec4WO>|rRq*ALBZT;5;_ zv!ABH8(-^dBMNsJ@r@8VI0p3zHdEiVA+^zk20p-n9AQSVyt1>Eg*^A5tVXzx$dJ1^PE1bl{IzSSU2iAVSN=)XnX`df50Kb^3#K=YS#>-T?^g6qpIW>x7h$ zpB(+@F-L5#kS%RXRE?oKX>%hk0y6Aa-~a#xkPU{UjV83f4hvYI009Otdy+FPfX730 z1REA&0Dw}U{$aoa4>S-sJu+~^&b6<9@3+&7k--*l8Vhq(C7We4!aDvZe|Agh;X698 z-&F@c_m-uZ(Ep1d`Nrhr(vtU&P^thJHBF3#3aGt40clf#6OYUK6tIK~1TY)GGORh# z7g8Fxt%~`-d;`T1A|~-a`=V=(QTPzt%D6S{dZ}Oe2=w~(O7=Od;>{k0Q7K$AaDfz1@+7d_ z00$<3ano9}wN!$EIv^<)S2Hqjx8e?ua8&ne`jW5jKsvOdHv!o~-n=Rp4ZdL+wbeT8 zP*W@cp^^zs6Bq$dzyZZk9Nn(-%$5AFz^p~$#J!O~EGT07@P)WdnRZH`YD=q>98egV zWAqQ8{T?_mhwW+D3v8zcHCV*!@j7GChvS;H?ZuuPb&P6rI__oDI#NtUaf9H-?Em#K zVAvb+=f)Ax#^&d}Y-Du!f{ELlxmtw~!Gx!kT4+TYL8n(n$(x2DV$0$qknGMu#pn!! zs(JY;`R;i+;irhcl=S?b#fA(dpUlIlR3_s)IFC(DL-L-+mf*eN6f9WPUR8C{P4iwO z7sFyxhb?^F`n@Od*VUjstw%&zmBnHv6|7GFnPLSDBOUNQ41(=5k5iPTxEB~!|Bk~$ zG2a$Zao&<&M3h0RJlog2JKPDu#z~Y7JsVgvMFY`KY^n|w^HMwa)qnu)%-RrTLOlZu zUfT^i5uaa2^_Fy7$;JFOB@y&e&_Od^8l~IK78wI2fzm2fbSKDYXFjvbbN$f%OE)#} zZdnd2Wt{Uk%^GbX)aczXlB++lEnCM_r;0M58sgt#cKQhA+6uqJ#{E0o{^H7d;v-B_ z{qJumyyGcy_4Pf$lD6~3>{w9l!!Wvi;&%U4_OiNUd83z?=9b$sqmA3Se$l{IsQvpG z$29sTUJa;=cBCMDW~Ngr_Rb(ArrnD4Sat=!T_tF@IG;Ua^qRgN*Pj*(#m9I&hTF4y z4ghHG3mdhCM*VuXMgQLdJAJ=i&zK|KbqsNRS1&LtOlR>e*ZwuBkLwpN>Dux3h}*qM zLImJ)h(i%#xDXdR<1Fv@dbXdmuXs9NVN_KTMcoZ|E4gGm_F)7P10x5)#mo*P4P%mw zHz(i}>P~`W4+Byja(h~QuspCHt4hAm=?(N&d%?e}X z*TSidO^A<(&CI3Cotuq`h)2YRYrsAev+t}R2zq&EXEQ4eedi+ax((=MJc~lPxSy8OKZuIJ6HddF%2%09q>$DZi zTZOD6=f8qwuhm6Y3B``mXgj_fk|AL&KjrGqX3s;YeiG%anQ|2OV1Y)Ox#y2%O=^!o zGFt41RvFN8H0K*em&eK?w*V7e5|h`Px_W{j8Bx+bkuMQDI-$Sdr)#<*Zs*ifeGbJabQfuguB?|6Pk6YvoU+coe(H9Kns zaTkcd2zUkRAslsQ+15|;LT=$xtE~xfgy45yyM^Lq1+@F;;o=R>2zQhq=O$R%y|0Da zmO4kEs)pb+E1x5MsoKur#-%-tGfLQdRPF^=5HlISB$*_8DDMkTI`r(K2^KIMIc?{q zlMSWG>EZ^aj~vdZ`Me&4rb`o98z>J_$+_)>v`15ImVJ||V0MUaNclYH9S9WIft)!$ z@iqgg0?VPtvQcsmWVMEn!xF-XsAWE%$8^28?Brp#txJaS*$}={<0dt1NNUkMRw9=g zl^MY_^J*t{+2NDfLa9Wv=vGU?VEr>%jU0~@7@1KUZ%ttM%|mXFpo1lxEYr^>b%htR zc^M>d6RvNVfXsuKY?NzEaHKE&O6fa}_2u>NPuJSx8303-naqo1@yz!8j>!WK1+io0 zMo5hLrnT`tq55J_T`M)oXv9gB*qY1g3SVSbw#XoAT$M?s(n;|YnqHzcz_F}`F)VoD zcj&X-$%?}mNl63JY2CE*K&ygs^; zi^p^D-?ICVj66yBeF%b+1*X+$NAmCqcuI=Eiu>uYhAAW0hGlHjh6CPz^oEoI+-Uy4 zeAuCOQw`k*&7IJ5b*gqq(-jbMfrJ>tK5n4&o*LQX=6G&cY=ORHqE>dHO3r~GM5qbe z$=B@+{3?G&)t$GGeIcgtRo<4M)%a`W&(;{v8m7fU0uj2peUboFp#XEG} zZl;Q2q7;kScarZ?9+Ma3FX9H4q-xi$i<5j0x$a&TWgttm)X}R@eBQ@rhV|6VxFBb; zdpXU4)=-ozZxhHAe(|4=Z?z-V`uBvgnYP!zfA%%QnK|Nf-1^m`nWS-^M8Xjy5QHEE za1NeV=GACR)DWaYPR#n}Dla&f+B0JrJ1%BkndozTyj!y{+QQ2E;Lm51BcKDUn=sS$ z9c3@bcU-8B5X7Zcap@GL&^${M{tTKU+KSA_XnXWnJQDJ>5|s1G5nQrbZI8OQO-1wE zLAH9vqPk0kfHdYaw3p`eAn*q3RxATG_QVtUim8JKGp1cFFn1N9#y>kmRAnyT)@l0K zt(ujO5_{Ho`_E>)?7mlHoJJ7g!}v?yH^X5XGLQuU(?3VvB(1-sGAlcTu<&I zTOxhb^W$!2xSkev;OoZ!fX?pJ@&DwBPMWg6AlWEOeh>&EIZNOpnk%e1weuWxVRy!m zf>l{wgIBD(2npLs+FtT7M#MJ1t~c8X*||K9#`7->r^=g+DDr1w7H-{Dmrixd#W6$3 zm2}IbqdCOD9PEK9JPMD_xL;|{-kk?f7J~B0%vQ!k5QFI{C-}2qdo#f!B%pri&omx{ z!~}U?U+MVr?`*564LB=CxK~qgX1IcNu2jUD3%SP z8fYU)4R_ihlxhTK)4$``l7e?d(TD8?>iKuZqH2d>nt;Ukeu7@O9X=1scr)Ib$qe{Y zd|<a0cH=Y%n(IR@I*7mevOlLgILMpLV-xU3HM1q9}B6VWe^n|(yNlSpbIs04r) zVC#beTf%do@b$F(BN;tA2E;*Tqknp6=0IN16~ABFI6F5Y)0^%3##<%8m46qHxLE{^AO z%1EE(^TAm=rPE%uriPWoB_(%vM zj<`ZT^K?6ZfT{L< zo|=7au3yJMNd}TlDdwJafYc)t#VGo7F4iG$(FDE3xFGT4Nn}EUit$C?9wOMDh26M+ zb2#M*F5{{fam&*i?{^m$Ht6`z-fp}2r7Ebsv_}x1AE)uw_nWfv&s1_b&>MCEo)QUM z(I_f$aDSE{b*j4Qeb?7iuD3E{iex6^GM&`GlSn5?t>O@n{`!o*WL$`FFA_it$w)pW zWQu!udcp~o;Jhph8kdAFE5XARqd?~q$t4y>mP-{}TM&jCUcI7!o0DkvO|Fi$IFaO>Jsh-W0atKiu1e!ja zo^G+Vc@}>S$iaBuDA+x19Aun4H5u72nf`!oUmd$ZHWP7E75u6!wa(*-L>JvoG!#Sj zGv{YZL~K*|2kAglwA2f*5fIA6z`@{_?Y*P~(8-V}g`(6EHX^|!-by1EyeqI{)nH3k zwWqcqVp4;>AvbBrHS*+%c|i4JwU*oC5CE~YSY#~D2OPU~_&p+5<$K8L?{t4w#KG*Q z3J3-u2&K<$&{v;XIFos%az6+$5-95@UP!;C4HbVSdr=#zq8dLz9mQtHHQ zJ6`{__ICL=ss=FbH*Wws#l;WJJZafC?CK!CFH&a(|IAm|NglY|sIyj7+8zADsCi&r z?t_#cdi~>4r0OK$Hy~vs34cIJLel;LlKU;2Qo)Sx&|f@QCg|27r7C~{97tS<^Zi4w z*w)8`tQ_>EJ~X2&v=dvt@z&C?njZ~`T!3sBbaZ2WH8LQ8Cpa($T;q*u z5F%>EYp>e&;jTq4#98DX7?kmRx%Sre=~U7@E%crnU3d=pUanRx=jn*ws+IM&qBBQ4C$ec1Gml?iho7*R=m zMp%?Mlei_VUJEa;wvCC?G9TgLL_>Z;S|nG_jYVIidDt*_ihGJwz<2Pp(4=A#^~I zZX(fkTfWJpo+XMi(U!Rm>LwB3f-^VY6=s%nEQ3@s@jzF;L-mOgg!D@V5sU*LPr~CB zxWH}c0s3v4BznW%A@swUucVU+GU&FO^m^*f%o(GhC#6B}A_5-5f@n2T^9Y;H_oUBdoPn7J4$*^YSZQhvCB9u+2^P|Guk08Yj{;qkTu8Lm2d&hQz5>o zN{umBMcG1v)f$rP?_ImznwZii64N16nx~*?<)X39bI*VT_WHOsipMP@^GYL|eMC2w z823k3RTEnVUs*#X%q8S|{deAhlv|Xb3xp$6hzUiIRA3psWbLbRWZnZWoM<_eQ$sakcV}7g2_-_n*&;vb!$6PE>+_`-WF{RTB3fKL zEBT{1)UP0m>&PRS38O39?;4^&oIxX^Ss8t%xg5=XQdG1xD%lh)cJV`IfBch)(4TX? zEkFJ%)VDYO|9t;jeS|-!^ZWnA+sL+?{orT*00ewoug`PeJf2^HwU7LGdF=^Z85>GLHQ8Ev>avEK%}Mknv6vBe4BEtYP-0)zOb(CQ&}~;L ze|D@*_poWxJs*<$RB%LoPNF$pNQEKcZ&ZvKysn>}KKru8-cH-ge|~lmO=f$%oK;T6 z>bk#=ER7t~p#(9Uk8_=Ix4qjFzP}OwWTpVu4SO*&y&~%%h4gLwV+vGk0h^^Z%Fi1g zX**(W*lZa2iJ?`gpO4~Ba}OtN#xlsf@qK;nS@?(3wMjaYPUc2DL7y+^)^MUsDtV7D z$5C-Tb!baN2{3S-r9XrpPrU8`I%d?JYG)V!d{c`nc1-+hibewx^ua6}j}c4xO}vTF;2MLeE(*~y zfNZv5k_=%60#(_?RmjlDSIZ~+!9M8bnJT2FRa$l=B}yH#sta=Z27>*TM!~& z2B|L-Y)03;;}}=Sv)c+?O_qrvW(x&!NV|2ReMa3`eF*o_Kwu65#5Ln#J1scPxpG+X zW*bAKaTSN7Vdf13W^ay*bl31X4XQsw? z&Jqw|wkQQ!GzgVpdl$RtSK4e=%%sw>m5|ltvN&Va^q=K~)CDD2M6X+Vf{MN(g-aJ% z*K2Oe!!0b}N*qiOgaKO1BKQr4>K7e=7+h&=X51l*?Ve)9W-_U4S^=FqfrOE&%$M>P zKPcpOW=#Wty8D7eK1Zqw(*_3Xh{lo*|2-j^P`3a7NS_dj-ltn&{nD@2+1Z!MM7R=y z@*BShKC`Kdv>u6-xq?*=d%;``Aaj!8X$Pdnp) zGx+(JD;U7!h=m=oi`g^zM-CHy`>dw3GL9X1hyx+)1r{EShbtbE%pSk-L!#J!F>*2F z%VcV(RXfK(AGj)&(r<5f(m6Qt(#mDVs{?fSIwkq~uLpg8c}M4t{hyKBPpLpUye{|> zz}N!q4a#3VmTLKusf4Ju;74Hvro!znRmN}{?Nx8Fo~^wJuQ8@%39B$C_j8`* zU}H%$&m*O>2=3^hff5v;h^w(;FHrJK%{&%4+V$#-bA_ws)9FuGd9H)VpSAE&O>(-J z2)=6Z5+%9>wZGRuj*HXQ2pmFE;p@#`45}SoG2w@L8`)8${4OC61Qc(Y5l6^7qx{NicQ}%}W$f6$uI4Z!FN0_PMso5*+4Lxz9t}MD|`|M3maZ08#9Dfn5J1FWsFkD z!_CRt$Mz)z>8Wq~5#ccSm14u~FR%W-ed&@aaBt=phkq|ImwQXm9pHiwYxAjtMNS3! zmBuy8qa_Q5n}#DCEWs-$pPwU3a;Xt45iq{~94{{;V+;w1h=6DUk8dz4uHEkX85-Uu z^J!3qtgCa5HudxME&PPVepU3QMZW#vwI`b$2z0jy1HzS}8^yRQsiH6&(f@ya?(`ZO z#;eAEoqCzQM5f(e>x^r&(gUIMum{HRC_KvPo}RoxQodrJ?o6WqkvuOZLkO9S85ouz)xcS+t3l?#SLWYc zJiYH|*GtEYxB6b`e#7JCFF(8P2=Ia_;NQj!++cb}2Kalf>95W#zK8h5wd8+4+%)0W z-?;Jak=yA%e*PR7!3?B{duj%6%;@HrfQhxL|3BB9x=_CBD8~KCu{h zw;OAOcsc+k;3Z)$qlG4oYveccfeI=Rtp>sYd=}izpT7I`=F8vxSc#h5cpM8}#KL-^ zf?+_-Y~238eHsI0_mc<2nQu0}3k=Q%(+1YR3I>1nx9;{MiG3h?`EIz$8beihrW=w_ zfmFvjhcoUgv_clVInJqZ&Vh8ZXr_ zqI54e^If;8MaY3~f`@~($9&o(#~(9wp8PdaB-EC6 z)ybinQgCtd`cC`++-zqU!P0YT?y@>?LEgZLnrQ&^U5xZpp+vg?j5VVO=$L2#hTCie zv8Sk_XxITUz($O90NWPRnXkZUkiScDxM=b2e;27{^6+{0G69~dHvBKPU zZ%2;2$n*T=*hv>QIr^y`AKtuv@*RsZ9|0TPBXF$#x0swHioc^gnIwRltb2>#EO7P# zA9B&(#|B`yf)lhPiXa9KXv^zP5pE1tK>}9b!}!Q-bng6_^9z_6rMh=fWMX=}RA*tzASf^^}>#&h|KNt55{JMfmROKb0kopRQj!735O{64zar><2ge0# zn{Xu6?w4#z?;;Fin)P^L$AtvXP3#~SF1cHedpjGtWc@heC|osK9<;oTT=tH{>VlJ@ z(-RI!(Rc%z8($UiWgN6;ZmQ=u)uw*{Xb;;o0!xEL{ z0pvzwDITV{R}6`XPW}KKaKbd$aLfq8Y(JXv=NO)9VOZxDC;-{xdbVCoO z30?sPa{cYhMkdrtcB6pr-ul&O6d8!sv)P@ES+J`FU8s%3;6>5tOg6{xC^_F$R*Jij z&Wo7^^rBeOW`y-N+^uW|yZ{vA2P7|?OrC0^>i}oVlL41;85O8&4AqBc~PM6;bax zh9N_PxJK9}0>N@Qvm*%SDSoh`Xu(9H)UwNZFI-1r z?0YU)5`Yia``nRo9+$f^^~I=~4_*iokjJ`2aCk8@wRA^2O||3s5$Y zw&f>ICM#&FyR_a6d2`c~+EAyYoKk1Ly-F%V|(A2j%$3VZ+hnvx*9NRGAr zw67`HnwgqrCsJ=D^LPwCz}AGIheMs$mpTs@E=t)Zfape2Hos?+pL3*|k#kYWI-vy5 ziejHI(N=`xRn##HY*`PQ;I$gfDv&%`P=FmT!Ue^+U-LbKW%moav#XrXA(ZB^fW!){ zBO;5F+Rr%Wpoov1^WYyAR80gESRKtwa2w%mRCe*1<}pE7ZsN_;r-LuH&xI(AHC?$C zs-Qj}&!@i5)m$Fm*3*ED{zHLX44ei9C^}dl#0)CIw2P7*xpaC~Oi(z;_K;bNyD*e! za7{&5!6w&2Xj-UtsIxJdCsCt}CVI@M1W+2(+^a&DMlPu{22m0aV?Jdei^%n`nS3BF z@i1(>iZK0?KOxXw9sI4>$yIHsT+YT6c1!a4#!_xlLJ2djd9|X)kYnstj`wsTGHCG z0qz-1lx@|04BPTqn`1;KI8S-gY$+99)0#|?Eu-xdxch(;a8YNQ-`ibv*U+XJ6|m1e zj%S)jkSOuGeNn&|sqK0yS!^f@4!NjLmx&91wkL1Z6V z83a341@t`jYKbCpG>KOVd4+`vPSTvH5I_zR@*-C%3c}hfmR8YKHMnL7R*L1diXhiQ zT^|4A7oGSCxsOiPKG@nd?}{Wz)DJBa26G}Kr>&qKUj@a^+a*5v_B8Qbk$t)yk*KLygy*cVFr-PQ(Pokaep_qnkX zAu#X2Uip*^$^rV z;3cF(XUr#KI5GY6c#_4cEajYa(i#l@HO zNVktb&}W=d@@VOd1A)dCD@Wq#Y$$=mW=SGpNV}vw6=-Fo?HhHy2Lf-Xj+u4xtP-(;vA`u$aDhT*jRc5P@EJBnvez-#?vmR}6M*0p-YE4Uunh}YC!KKz}+4p=AotY0JAanEG zbRsZSVuPTo$x`V_2XpyAcIT3Ua#*bC$!xw`lsNiXS4smM6tr42o#^B@#;kVR8fB@7 zhg$X8mfmnz&#Lu2OgS*Nio#fqwxA;T9!>G6W? zmGMrh!(P1FQL8YeR-8#B90!~^;U5%6oj#w(ZqVGwlGIe!QpSwxBXtcZagjQ7{I!!VPvWgUEMCg(?DrmwHlsGFJ57k(^x{Yelg&;B@ z#vmRcZB;LYDtcR2(u&Ooxhc0)Kl6oMKu3#Y1KNtt7~NTVCEEv(?xp7iBW0!`SU}8s zJ(#LFb}BOwyhqYdT1B9@C%J4JA>o$sx!GD@*4z4$=0hJp^jNMGe{TKZuDgn~0rUj0 zpp+E_AqmmtBkmoJVSUKFM);EMf(U$^)K6!}PKmPdspM)Ds0Um$bDLf+Bd?EZ>)R{D zH8ZjiAE1Etn$Bu9B`6p@11;BhL$6gX7S%54B^{xnx^;q=9$|imjiz5t8}_{U9yWC# z4tcsFMOJ1xAtJD)U+xvc6oKKBeqJ(`$_{qull0!*KG9QN!A>Wg@qYu;l zh}e{`4^n&u#}V_&IN3+uQCaw*^8j)A?(tr~F(!*q!@3mDQY@kNpHxgY!>I?grxUtN4Zxsis|!m@H&W!hJr|@-f8l~ zSp!IjQa+o7nPD1EdL1DVf zk`U1|6rJ`N^k6^CxAaLTmzp20Ykq$D4@zS5oG^C?w}(-1P-o-KAYrOklm5q5v0imEWD)H zcJac#KR#Cb+gPe3iu&V78c^GUGmGA3t;sqV+ zfH4VJE%IJ56Rz3+6N=|3R>^vGbobFU8#RJSXZXpWpM_a;E1IkT)!l83S2o67zMD#@ zAWD|Ml{Ku)vL?3JkZ?B6Fc6X1B;}3L&w9ILSh#(xs60x=zaEN4ZR6k>a#eGbdoE9= zG=`xWc%cxSVHgKTJ0IVi<5K}^9t(w$S?OZ2K&r>&yQ)h=*GqD z2w5k>k$KFi!bJ#b_Q`|+dye1s;h>wb(yw1@6&L9XLB5p}ZVHnXi7)sKlgT*5twQ0* zRm>>PJ?GSNkO7u=ooXM{qU}+|J`cnfvuWZ8+od4B!eomG_|651^W^!>1IwY0<;L8; z03^X_NFn88_udBEzBwxE883r0V@$a4T$_dpChW6!0zWf?7 z_up5H0BB`$vGkT+bpYV#5U8rkO1N#Y68{M;a#S9L@yB3nyj4U62U{o3AQ&%)Z^IAZ z4t&pv`)_fshntf=qP{j3FC3d%?0uti%H+Mgd8Q<+kdJeb+Y=7)!d@oCmX#Z>PJ7wF zEDCeHFY6IkpD0}6W%cI)G$XNrf8`*eZRclO79P&43-*x8n2%*2{Xo%L{8R2PJhD&9Rzv^1t5#rV>vLlWj!F_U%OM$$L9}5ho_u#zv_1l5D%m=Ga|sUult9Ay{ir#XdynWkZAz9Uwy_n*S)L0 zl3SE@Eo6^qtUev2p_twL8nDH8G*M0|J`)$U2eV(_I3h1w-yO^oto-JBS1}V}kC|Re z@=>twsUPkDqsg!WD5&N&coeRVs{H=;-;;hL5I@eo&h$Wruz%k<;&(@$@FcN?9d44RQeV$|S0O*S|!8qzpw zkqY+Oi3zW%Ua#2`{!PJ1;b{mo3YSOu08L;lnb83r#36$J*Uh8ltix+N|CbBq-hHBLw-vvin$U0Rad zqvLEwp}ucSu##**Tdr&+>1_eG_z*^43ewI2ozRM(+)S)r2Y63GTbgxBpCxDV4boY zYmRDjL=L+g@j}yJ%BfI68`@k*(8AkT-2+6>yN_|%+CDs=&k$JW$Exj4C$y(5j?vKqMFGVlPOfByimurQ z5`PX>0bZu7DdU0C?H1(KOw*O34{)V_D2mM6dwm<@?c{bQxJk!WRU6b*S0z<*TZ6iF zjeMJ12zT3C0AtmCdCiKd#e=5PxTtg<4uY(M(a`y0$DQgb?Me4x-D3O;@rBI# zXDL{WObrw|;d#|8Zn0(p_Z` z4B&z{c!g&@>Mi!tr*g zcpKeQsbdVxiYM_%=NL_k&GMWDMRlb4B&r}EQ7G=!3!A zRzp+amrTe@*?hH8txehVbm>k?I88GcmLI*`M<@X(X{<7A*Q6jmu_jZ>TuillAM7Y5 zG8+BS-;-X$_~v=OsfsA-&HrgXq# zs4okb2ws(eMzreu#dWRCD&Q_W(-(@!3D~okhWNUEpn_j6``yBdN*XAWsVcmPYB(9( z$1KG-vw1R@r93*gcio$hy`49qUrps6*O@sA<$=Pq2$>)TTWN@N7>WWOqIeXKlrge@ zHdoySKT{@2eph7g0;c02nBb*mpV>M3^2u1PZdFy^WC%X^N`Sx-*rXbcFJa-mq$(tM zix#WFOnfk+tJOEf4Ut9(22U24n-5V1l+t5{O_+71rovxvHHt~DgXR{Al)O;^jLk!E zDbY1gwq%I~8{o4iJf#gz&JfXP`ebKE05t>L%p5c-+%4W?YR{$}yfM(=qlN9VrjOL& z+|V%-*53&}V(>NaYmqH?tlC%yv@7Tga0dJWJ9xEKhw`Nyf{ge($gAscBFZ^}%ZloF zOtz5~%6IY>0)*j^#xL~9-0=(>vJ|K=3o#hOyLi{oO%mpB(mo3DQORwV^L`jsx#gN8 z>V8RYw7wY!pR=d@h>sZj$9DFSTQUEh?)`||it^{~>qkPvzG>CL-ab_b(Zo|qdTMME z3aV8CzL2uaKETZ(u%Aw&7%H$j!BfNsF_=ImEM^Id*3+9IA3s#xu39n;8)50K7~MWT zw~eVT_|uST7Zu4fY#t~45-@zQs@Z7W>p8c@+>`w-9e+N^A#pp5fKX_ckQ88x?#a{< zv(zTHn_&tP)~ZS|ZOTp0WwpWWimHy*k~M(%Yrisz2udEm4jI#V$JF4tUyEC9?X&Lz zUBsC8qu`8BoLxbB5Im5OMLC!i`cFs$@Ud$@;CSoO8Ss-hSM%#}`Ll+JQ%}Kd@=b_) z0bZJVXoHpZxex+~BF}jO=L?)SfCqPA4)VxyIJ&E!1U2Q3q?IoAzz7z!40`KWIou|= ztx#D5>}w%0rB8^;>EHzz(5rfXdA!bU>|DkHtKy0Go>+t*cq_-gnRa|x!Q>s#!0=%M z69p0)wNC*KSJ9tyyTn~7J#9ECrEvky_lODkRiRO1phYHru^IDdzEb;5u}qrdf{CZ1 zSwn5n<59A=mZiVoA{hm39Co?SbVHetf;xoEyWyuUj=Zv8>89gs%ubz_S9_W1LY+5b zY`q?KenYLN2Mi@L6d2AoFP))Crb3zB+S?3I`8lmt zCbKY2!ozl)i`7yly){>grE|P+Iu_mnN<%NRb%cXE393_(C~^W{2ZN97vPH}}soK2^ z#?At<#^xc7j67wNuJ@e#fI-HW7Oh+qA2WO>45uh$_G!-j=qfsk8g_-~c0<(%6_ifj zS_3Z*TzTA4`62N7tWV_1Wju&3=oKONx+1KEvpy?XmGnAQ-u42aEwccM!zn9g1+EyN z`ZV()oz`i5WsL2UFi&Bg9{g)$aP4;=|BiU(@XOZKc4KIwZ#}xpp_kvWVELhBuE^3C z`T&Y6>fG`nSLOJ>dv2)hk>3v|6MOL?_yc_ZQOoVPZ7FE`0@Smpy5_};)laQ<4)AZs zE7CIFax35}Sc87$d8TQ7>GX%aQZxsIeb-U1dNo9Zt*&C zKa-gF@MJ|!Ra7X2r6N%_r(F!dae zfdv9soW^41c5-Ir6{Hd(> zkwQ-t-bu%WVVB-luM&y`=d2q=27+YBQoEy4h62g+(qK95Ul4e&RMNGwrw(pJ+o`XonUvTbWqblw{m zluJ~#y_+;cXD%d!JMBDjpxzc_Y;#2vRcT6H}mgzCEwa6yx zJ4-cThCvhVz~;{HcZEmW)FEa@@mQWQ&`P4P0f^cW*}M3rm?y878=bY$M?y$qgct~a zkvM@^WconYP?*^R;+Muh%2jLV=W!CCmmGlaabD3|nab`Tv`c@TY#NZCYe^c%uFx8c zCjl!`em=rT<~c7Go6_@kP;W6K^5vK;iRd|iopaGm(i$2+>jaJhcJNXnzU)l!w{$bxY(zY$Y-aJe z0|y*&viAVqGkJDs@RERg){MASD|N=BP|fd+MvlBP?NZm*R=ajELesCzi@W0aJKho} z&?E8VZck&E#$667tkwOH%6tkx%psSy7=kX7yL>ZMvz%_+sjjV-E``||p`C6-ORZKd?=vt_UjMn1P)Cn+2 zs=M&3CpGIY7LihBkyEkzI!X%dat9rVN!l!o^T|>{2vHRDbngAOH~~DPSaF7}Y@@Yz zXJFNaEex$m)w<*u6vW{H@GwZ>S%!1!7s;e*c?g9T!&H>x{f2SqY&AlTS-{9Olm#KP zIU#_B4vBNMXCsc8%+jz@Lqoswd|{qrTw{GLT7NS+TY^vB%_vp0!dl%2iCw@P>1kH1 zi<6ww>mwi){jThNj>=ZHwz%>6Jso4llj6+;C*cXW8GeTU2>+JRlEjydAAw%f>+7A- zilmzl!@J8`D!yb`m$@kSxPOiP$jUqoOl=#n)Q=dsDug8~8e&|u+O$&8;hGJDg&}N` z3!npU&N zNeDUSN-Lavu5?+dqm$#cbu!@n?K|fK5fU@4P>HxyRC0RR=|x?e$2cf?a-uYytXlV$ zaL?+x3V782@>J3;=NAP2M%75=#lB%=+Zb4Sm#d+$AYW8=yYf08IM%o^9KW_ZP~BYY zhqg|$;N7C$BTf{23Q2k4tet$~x~7X%X9;sBprueAKTd~RYi86_6ryb!_mfR@peP$$ zCLQu;eR!?PCxX*1`r`UTZ=D*rzwAXD@+CBD(f^r(Unu2FC zEmX|DZ@iHSUhrEjQ%0h^Q)^Q;S&a%i_oF@%&`;K@o|9+fhz!{gK|$y{&}~(xeLAbE zm_D0|y`n;SS?_$_Za^#1Pt*FQQcP zMmN(ds};LBdS7mj7ZUC`Etf^WKfm;CoxSgVU-8VuA*b-ersC|eTIcAUJq`Kd>Ia*K zRZyCHDyQ@T#QQLi2~N6c8gc2U_;PD?H~TAcUmyp!XBH+&EQD_*#Fx=UG~XmpJ*G{7 z$$RVefEf1JFZEh;wF>INhWJ)z(fR{%8Cv`mW?MtYO&U+Ocr7^2)=n8nCdUeSjv05) z9JG6mFY0AJlQ32;cHrD`D~Iw4yOV76!;}KslyFi$Q_(s&HOqibx)k{RyaE{~ffUbU ziTNNtAu%s3j;zxW%y2Z7NpC~sgkY-EPNjnK)W;9O{-oB*Jq@(nCPFDvmJF}yEzWi8 z2r{m-IB(A$8}bJp7faBqTd1%vH7ekVj#^F5Q`_^`6fmZq=@Qq!JNp;kYfr8e46CFB zab`iK3yE-@KbNd0l0|Y%pV7bOhR>Y{RD^})J|)BF@jY3?!(%U22H-4p>z@jj*$UKB z9QhC|hlf4HR>JC4dB1dG)*(j+RE zEKh|)@R|oz~h^Kelu0GNF>ntI6pNeugqOMdxVoL;~UlcuD*HrKi3#K;`f6h zG?V*Q53nrMz&6cmFFaC;oqoMIp?Jy>F-JX#Y*S=GTBzncd{tMLjhgnayapFjnq8>y z48$aEs))N(jpjB@`85;3-%w;1gmG?it`qi_ev=5`ri3);!HsiqQW2V!*$rpD3Kb6+ z6s8L?TDA*ouxHk;H$}%~U_954D#Q5T{o*+tYepHJ4?j}YwAp}nEbMVQ_t8O`s|kIj`KPoON^k`XKF1JRQL9xdwhuLmw;gk&YVR4nn4RCFWRz6$Bu5@foJ)AIs4ILb=_2(|M4E?h{9~$9(xS;uQ58zemA3RiF7*5l1eO z)x>%oHaf5Zf=SSU8|RG3D_pXyi+(hYd^nNC_MvTYeNciON9ZQL`t{4=0iVcsa34RSn(b`xxR8g00VqduVu?2bz1ekkBQ3gk5Ac z?KzoeyKJ@&tIUS&$8~JHB|GEd;ztTWjNF={%G9EMJ$n#BsFZ1B7E7K=bJv>)EyT&E z&catmrLzmWP^XWik^)Lv<-vM7lrl9r8&I5ryU@KPc?Bp8%l5Nymki@yJOj7T&x9sS zH1yh?2NSRb-->U4Qj0EyeuC2Jmk5vnwAfOv3yGhi|GdlcpT6f@3;nne+UJ`{cQ14t zIUjU%%sA>|Xh5`QIx1V0e?HsVx-V~NpLwZV??NJ*+dBo$Q8(xz>_ z2TGL)x#tfpFVxB>7E-Z93MdZCq|Pn74q67Ic$vh~nnPz+NjeH7m1?^Zilivy8Z`2j zGgOuB0$}#qQcWmJv4Z2EA)P!W>O6=PMM}Es!@BAvMHB&M#vhuVrZJVKvJ4q0pg3G7 z2=#jm)aZ2l`SqWDw1aBO%hxwOcXfjJx8ZYjigmEdBijHMPd@m6KcY9z{PoE>r6i58 zx%@oQ$9RO9E@dZN{lHylg+|BbcPO>m+wlODq@sIOSK+j#W*tZFU!RPAMFhL|ORooK zAK?t!u{ozM_)^%E=IedH<3Obey#tCLsv zvRo)Moa%WEU2%ml!Y!!F5JkY_JjUG(fIcYjd@S}vU3GOR7CZ}o_9oMJp0SaCMf%u% zsrBX4${3((zibgw@M(C{Bgs21Uq;SIE%H}JFA2C&J^wWER`kw^;)`I-_Im0$64}_m zw|~kP{I(knhPJ?y0y-kBA24esBC1xtq|g}|9H+{hlT-pzU4KK!2qRojur_Wt>$mOl)&uZ3+G}C? zhQ42fojnaSf=xyL^-N_!?Un9i?O8glN|c>EUt~|)B7vsc5|?rg1P;rLdCsMYm(se_ z4ux3IVoSnh1If(-*IGhky*Os`$ZL*`b-uY83T@3*D`+{FWcwm($}~|WtLB07jM}Tr zq|jMD8U-&;(Zt$spw_!9NE8(^WT#PGN`zC- zv^&!XwS1{HhP)~U3po6Y0U-tSA*La57nyH#m^xxvJQI#Cn^L7c4O^xVu7-866W@%l zZ6B`JhMHkxCUf4Zro$TDVZ@0Es#8h_8Sv)CaE8CC*Y6)}I*)!Db=J`WY24d3j?8rT zcFp>RQs69_;-cGSfG~&iX$5ER&i)nr&CgdvJ?fQgP^~v+87+Vqk{q^ilx-GOQDrJg z4vvWj?Mq%=FO`%~tzzFauWfvbL&l5G6g>A><{$NvP^0#N`MRA*o(7hAVDAzvHn&KE zHh)gs1%@6`^R}ckD(E#`lS(ZRRw)(H#?BlyaRtm%i*ysgv9}$1XfhGJMSjEKkMX1YiEf_zKi-ILaH$RklxTAYym4mJ1Q zxTHhHh+|qM-=ZJn3vz|RVS>ba&1_?kPvqSN_QD=Zmsgi{x{1H0KpQBsSXJN=uBvMA z!ytP1+hFD|Osec)*^UAy%!go)_p|9W*)WWvs>%0*mh~mM{(YB5VFr%F_u)VAt$1%4 zI2zAn5){OOctFFev`WEX7m7*Eu0x{(GW;-uF6~~q;|x>$c$!CBrjr57iMWX4WT)iX zLzr8;-kdt@==lvu>%>e}8;U83QPz8U=`P`k6m^**Z8t)fPVw z4iXryHwt@~ZmagvGq&bSUd?$=v^)Tlc*{!gQrRq^TY*&lD>Ldg_|zAcvpG0v!mV)C zoJNEjWgpz!96P&WUOYRq7R}F`rMXBF-rUCJN(mWW=isx^VK?m`t$JQlA@OM5Nsg|b z7rNDznY5K!K(%AN2kqV4*QHm_u?-6=rQvV29|Ou~vi}9%$F^zb)C)!>Q6(lu&U0-E z4LaC0p9F!$0fDob7P|jBEGj)Tu+k@+y~@tlY#b&eAOav#2>AT z$N_6L)h@zY9o^^)iI1J9SElBmY#;@cEIPno9Rn>7NMivf-wy_`@macb?&gYGTQmdE zCKtztlw-a4r}BNSVa*i8^VIzwx*egqfa_+70qfJ|06>_JGsqBi>M^pl%YdHgZQ#^E zJZ1zFjI{#V#<-E8HZ^inyT6i8M=Po5`b0}*CDyyYbSScZ7fBiSn(GDn|HY4UwR>2K zWinF zKY#9Aa4_g?($+DBQ^y|sg~I1G>iSgVKHVIcCnWu{O!JUiP*b+a-b5t&3wtccqIS=e z@SHb%=9OvLG*G(1Q-RuC_3`fIh2mIB?KmE0fFlO-V{=4U<#?h{?!NJ26$r@1)o9r= zdIy-@CNJ)P*>CNQMIe!%Ua3FNSS1f~`OG!FSN!Wyhfe%@!(QQ%fATa3ir&PB!Y-3N z#k-O&6qW)HsHH0XU{W^0lu1k_O&=L(D3!A=)F(}pYAL|)MUn_W} znQk*RpGG>QQ}u2>7q8$f_c*JYf4z~)HvJO*OgHLkFr(5(Aa|@y;QXu_ccff zj6-r%%X$Q=t}W#ShV{B^hAiSpHQku%o-AECu8A0P6?e&4$=)DRbg;t==x_p#%Z2sZ z|KhMKQR0Wf%ggosS^&qjw)CRH(^Z*fD#`id_COOw+W`ESnBrfj<4p88Sjoqr`T2>q zrKo-F9m*~xXxbwP2W(LzYbz>|NdU()PG+}}sJx;2XT!9+@ zDp-P`%ojVJX+5*_w4sxd-5oo^?=#a6Hc4girB1_Zs%GO+F(S5zn0NLSAqH_J=K-)u zVjN+V4}V%I=O)qLM6n869hw7sOznB9N@heW6%d05P_GrbK*9oEi&yr67OxY-rf2>B zsuH;HPWuw6D=p7ag*f1k*%#;AG%f^`sQf88Sq94VM)IX+@*qfU`7EMb#Sp&`~W2eBAg zq42#R3WisenzR+MC>ue=#s!;RLozi_VZBn84`_{j-rW0sJZ;;8syngpR9L=Iq=vkX zsM&<&A@oA^)RD&Oxt4;{Cr&rfdfEn02$c$$hCT>V02Wsvl?AqjUBw*hp?LD7s+gP~ zyG*@FR@81rclc8=c_g`uA$>#yr8KEXaY$A?f%=QEUw-Q0D%b#L;b-G#eX& zUbRpfm;Zh7x=6ig<^~jtCtF!A1?)0(vr}}l;cz7TKowQd!+{Md@S{t89ESgXouJT{ zY%Z9`m5EQDo_pX~6kGD2*mTh0;E5Z7^W4D{qjjfxuK@211N&lnCb+GsKQAl{ZM%f=<5J- z!2BwuGG;>q2sYlu42o!xW`KiHsKe096t*TdFQzH|a?i|r<}`!gQ@U&gk)t~?j^h_1 zbiOM6W;xJcl_P*_wHBe~wUTxGxj+5CxAJ*iZ~Eg`+WzYviuI+u$;>k_eYT;Z0I?O^FCKJaJM}D Z%W3>CI$@P~5SgeBd{mD4Gdn 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%0DZzBc#{kuHQ3xWI`Ear!Re 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 E0Ln!2jQ{`u literal 0 HcmV?d00001 diff --git a/libs/components/src/avatar/avatar.component.ts b/libs/components/src/avatar/avatar.component.ts index 0e3dbd6f1b9..554f55636fc 100644 --- a/libs/components/src/avatar/avatar.component.ts +++ b/libs/components/src/avatar/avatar.component.ts @@ -123,7 +123,7 @@ export class AvatarComponent implements OnChanges { textTag.setAttribute("fill", Utils.pickTextColorBasedOnBgColor(color, 135, true)); textTag.setAttribute( "font-family", - '"DM Sans","Helvetica Neue",Helvetica,Arial,' + + 'Roboto,"Helvetica Neue",Helvetica,Arial,' + 'sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"', ); // Warning do not use innerHTML here, characters are user provided diff --git a/libs/components/src/variables.scss b/libs/components/src/variables.scss index bc9cded4981..e3651f9c37d 100644 --- a/libs/components/src/variables.scss +++ b/libs/components/src/variables.scss @@ -21,7 +21,7 @@ $body-bg: $white; $body-color: #333333; $font-family-sans-serif: - "DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; $h1-font-size: 1.7rem; From 87b875c48b2a9c5d463397a4bdefe42412399a42 Mon Sep 17 00:00:00 2001 From: Patrick-Pimentel-Bitwarden Date: Mon, 12 May 2025 09:29:11 -0400 Subject: [PATCH 32/36] docs(update-auth-approving-clients): [PM-17111] Add Browser to List of Approving Clients - Updated comments. (#14707) --- .../services/platform-utils/browser-platform-utils.service.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts b/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts index c9200ecc1a4..22708d8e425 100644 --- a/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts +++ b/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts @@ -26,6 +26,10 @@ export abstract class BrowserPlatformUtilsService implements PlatformUtilsServic return this.deviceCache; } + // ORDERING MATTERS HERE + // Ordered from most specific to least specific. We try to discern the greatest detail + // for the type of extension the user is on by checking specific cases first and as we go down + // the list we hope to catch all by the most generic clients they could be on. if (BrowserPlatformUtilsService.isFirefox()) { this.deviceCache = DeviceType.FirefoxExtension; } else if (BrowserPlatformUtilsService.isOpera(globalContext)) { From aca8ab8e40f18108ddbf3a1808c545bc1571b1f7 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 12 May 2025 15:31:03 +0200 Subject: [PATCH 33/36] [PM-21001] Move autofill code to new encrypt service interface (#14548) * Move autofill code to new encrypt service interface * Fix test runner --- .../src/native-message.service.ts | 8 ++------ .../src/services/duckduckgo-message-handler.service.ts | 5 ++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/apps/desktop/native-messaging-test-runner/src/native-message.service.ts b/apps/desktop/native-messaging-test-runner/src/native-message.service.ts index c01d581afe8..c2356f93e28 100644 --- a/apps/desktop/native-messaging-test-runner/src/native-message.service.ts +++ b/apps/desktop/native-messaging-test-runner/src/native-message.service.ts @@ -220,7 +220,7 @@ export default class NativeMessageService { const sharedKey = await this.getSharedKeyForKey(key); - return this.encryptService.encrypt(commandDataString, sharedKey); + return this.encryptService.encryptString(commandDataString, sharedKey); } private async decryptResponsePayload( @@ -228,11 +228,7 @@ export default class NativeMessageService { key: string, ): Promise { const sharedKey = await this.getSharedKeyForKey(key); - const decrypted = await this.encryptService.decryptToUtf8( - payload, - sharedKey, - "native-messaging-session", - ); + const decrypted = await this.encryptService.decryptString(payload, sharedKey); return JSON.parse(decrypted); } diff --git a/apps/desktop/src/services/duckduckgo-message-handler.service.ts b/apps/desktop/src/services/duckduckgo-message-handler.service.ts index e82444be993..6fb91231be1 100644 --- a/apps/desktop/src/services/duckduckgo-message-handler.service.ts +++ b/apps/desktop/src/services/duckduckgo-message-handler.service.ts @@ -168,7 +168,7 @@ export class DuckDuckGoMessageHandlerService { payload: DecryptedCommandData, key: SymmetricCryptoKey, ): Promise { - return await this.encryptService.encrypt(JSON.stringify(payload), key); + return await this.encryptService.encryptString(JSON.stringify(payload), key); } private async decryptPayload(message: EncryptedMessage): Promise { @@ -188,10 +188,9 @@ export class DuckDuckGoMessageHandlerService { } try { - let decryptedResult = await this.encryptService.decryptToUtf8( + let decryptedResult = await this.encryptService.decryptString( message.encryptedCommand as EncString, this.duckduckgoSharedSecret, - "ddg-shared-key", ); decryptedResult = this.trimNullCharsFromMessage(decryptedResult); From 57ed1e7285f8a263429140a19ae0e0ff32258dc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 10:09:40 -0400 Subject: [PATCH 34/36] [deps] Platform: Update @types/node to v22.15.3 (#14723) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../native-messaging-test-runner/package-lock.json | 8 ++++---- apps/desktop/native-messaging-test-runner/package.json | 2 +- package-lock.json | 8 ++++---- package.json | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/desktop/native-messaging-test-runner/package-lock.json b/apps/desktop/native-messaging-test-runner/package-lock.json index d506e109e94..8b39fd9805e 100644 --- a/apps/desktop/native-messaging-test-runner/package-lock.json +++ b/apps/desktop/native-messaging-test-runner/package-lock.json @@ -17,7 +17,7 @@ "yargs": "17.7.2" }, "devDependencies": { - "@types/node": "22.14.1", + "@types/node": "22.15.3", "typescript": "5.4.2" } }, @@ -101,9 +101,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", - "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", + "version": "22.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", + "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" diff --git a/apps/desktop/native-messaging-test-runner/package.json b/apps/desktop/native-messaging-test-runner/package.json index f67ab259d3b..ea6b1b3e7a8 100644 --- a/apps/desktop/native-messaging-test-runner/package.json +++ b/apps/desktop/native-messaging-test-runner/package.json @@ -22,7 +22,7 @@ "yargs": "17.7.2" }, "devDependencies": { - "@types/node": "22.14.1", + "@types/node": "22.15.3", "typescript": "5.4.2" }, "_moduleAliases": { diff --git a/package-lock.json b/package-lock.json index 1e7e0741cd8..a15275a695e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,7 +110,7 @@ "@types/koa-json": "2.0.23", "@types/lowdb": "1.0.15", "@types/lunr": "2.3.7", - "@types/node": "22.14.1", + "@types/node": "22.15.3", "@types/node-fetch": "2.6.4", "@types/node-forge": "1.3.11", "@types/papaparse": "5.3.15", @@ -11656,9 +11656,9 @@ } }, "node_modules/@types/node": { - "version": "22.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", - "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", + "version": "22.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", + "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 81f1c92d5a5..904ae121cc9 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "@types/koa-json": "2.0.23", "@types/lowdb": "1.0.15", "@types/lunr": "2.3.7", - "@types/node": "22.14.1", + "@types/node": "22.15.3", "@types/node-fetch": "2.6.4", "@types/node-forge": "1.3.11", "@types/papaparse": "5.3.15", From 89b9ba21cabbd4ddaf71bba9f267cd646bd4fc9b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 07:15:06 -0700 Subject: [PATCH 35/36] [deps] Platform: Update Rust crate arboard to v3.5.0 (#14484) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- apps/desktop/desktop_native/Cargo.lock | 153 ++++++++----------------- apps/desktop/desktop_native/Cargo.toml | 2 +- 2 files changed, 46 insertions(+), 109 deletions(-) diff --git a/apps/desktop/desktop_native/Cargo.lock b/apps/desktop/desktop_native/Cargo.lock index cfd29303510..1b442fbbb8a 100644 --- a/apps/desktop/desktop_native/Cargo.lock +++ b/apps/desktop/desktop_native/Cargo.lock @@ -120,9 +120,9 @@ checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "arboard" -version = "3.4.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" +checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" dependencies = [ "clipboard-win", "log", @@ -130,6 +130,7 @@ dependencies = [ "objc2-app-kit", "objc2-foundation", "parking_lot", + "percent-encoding", "wl-clipboard-rs", "x11rb", ] @@ -465,15 +466,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" -dependencies = [ - "objc2", -] - [[package]] name = "blocking" version = "1.6.1" @@ -565,12 +557,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "cfg_aliases" version = "0.2.1" @@ -867,17 +853,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "derive-new" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "desktop_core" version = "0.0.0" @@ -1007,6 +982,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags", + "objc2", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1409,7 +1394,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bdbbd5bc8c5749697ccaa352fa45aff8730cf21c68029c0eef1ffed7c3d6ba2" dependencies = [ "cfg-if", - "nix 0.29.0", + "nix", "widestring", "windows 0.57.0", ] @@ -1839,18 +1824,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "nix" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases 0.1.1", - "libc", -] - [[package]] name = "nix" version = "0.29.0" @@ -1859,7 +1832,7 @@ checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags", "cfg-if", - "cfg_aliases 0.2.1", + "cfg_aliases", "libc", "memoffset", ] @@ -1990,47 +1963,24 @@ dependencies = [ "libc", ] -[[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" - [[package]] name = "objc2" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" dependencies = [ - "objc-sys", "objc2-encode", ] [[package]] name = "objc2-app-kit" -version = "0.2.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ "bitflags", - "block2", - "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", -] - -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags", - "block2", "objc2", + "objc2-core-graphics", "objc2-foundation", ] @@ -2041,18 +1991,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ "bitflags", + "dispatch2", + "objc2", ] [[package]] -name = "objc2-core-image" -version = "0.2.2" +name = "objc2-core-graphics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "block2", + "bitflags", + "dispatch2", "objc2", - "objc2-foundation", - "objc2-metal", + "objc2-core-foundation", + "objc2-io-surface", ] [[package]] @@ -2063,14 +2016,13 @@ checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "objc2-foundation" -version = "0.2.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ "bitflags", - "block2", - "libc", "objc2", + "objc2-core-foundation", ] [[package]] @@ -2084,28 +2036,14 @@ dependencies = [ ] [[package]] -name = "objc2-metal" -version = "0.2.2" +name = "objc2-io-surface" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ "bitflags", - "block2", "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags", - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", + "objc2-core-foundation", ] [[package]] @@ -3487,9 +3425,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.31.2" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" dependencies = [ "bitflags", "wayland-backend", @@ -3499,9 +3437,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.2.0" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" dependencies = [ "bitflags", "wayland-backend", @@ -3982,15 +3920,14 @@ dependencies = [ [[package]] name = "wl-clipboard-rs" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b41773911497b18ca8553c3daaf8ec9fe9819caf93d451d3055f69de028adb" +checksum = "2a083daad7e8a4b8805ad73947ccadabe62afe37ce0e9787a56ff373d34762c7" dependencies = [ - "derive-new", "libc", "log", - "nix 0.28.0", "os_pipe", + "rustix", "tempfile", "thiserror 1.0.69", "tree_magic_mini", @@ -4085,7 +4022,7 @@ dependencies = [ "futures-sink", "futures-util", "hex", - "nix 0.29.0", + "nix", "ordered-stream", "rand 0.8.5", "serde", @@ -4115,7 +4052,7 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix 0.29.0", + "nix", "ordered-stream", "serde", "serde_repr", diff --git a/apps/desktop/desktop_native/Cargo.toml b/apps/desktop/desktop_native/Cargo.toml index f613744f42a..fafaf02eca3 100644 --- a/apps/desktop/desktop_native/Cargo.toml +++ b/apps/desktop/desktop_native/Cargo.toml @@ -11,7 +11,7 @@ publish = false [workspace.dependencies] aes = "=0.8.4" anyhow = "=1.0.94" -arboard = { version = "=3.4.1", default-features = false } +arboard = { version = "=3.5.0", default-features = false } argon2 = "=0.5.3" base64 = "=0.22.1" bindgen = "0.71.1" From 07725853a287c679964a608f3b23695c54030575 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Mon, 12 May 2025 17:00:53 +0200 Subject: [PATCH 36/36] Add tests for masterpasswordservice (#14728) * Add tests for masterpasswordservice * Fix tests --- .../services/master-password.service.spec.ts | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/libs/common/src/key-management/master-password/services/master-password.service.spec.ts b/libs/common/src/key-management/master-password/services/master-password.service.spec.ts index 93439ac8caa..b55e770f865 100644 --- a/libs/common/src/key-management/master-password/services/master-password.service.spec.ts +++ b/libs/common/src/key-management/master-password/services/master-password.service.spec.ts @@ -2,12 +2,16 @@ import { mock, MockProxy } from "jest-mock-extended"; import { of } from "rxjs"; import * as rxjs from "rxjs"; +import { makeSymmetricCryptoKey } from "../../../../spec"; import { ForceSetPasswordReason } from "../../../auth/models/domain/force-set-password-reason"; import { KeyGenerationService } from "../../../platform/abstractions/key-generation.service"; import { LogService } from "../../../platform/abstractions/log.service"; import { StateService } from "../../../platform/abstractions/state.service"; +import { EncString } from "../../../platform/models/domain/enc-string"; +import { SymmetricCryptoKey } from "../../../platform/models/domain/symmetric-crypto-key"; import { StateProvider } from "../../../platform/state"; import { UserId } from "../../../types/guid"; +import { MasterKey } from "../../../types/key"; import { EncryptService } from "../../crypto/abstractions/encrypt.service"; import { MasterPasswordService } from "./master-password.service"; @@ -27,6 +31,14 @@ describe("MasterPasswordService", () => { update: jest.fn().mockResolvedValue(null), }; + const testUserKey: SymmetricCryptoKey = makeSymmetricCryptoKey(64, 1); + const testMasterKey: MasterKey = makeSymmetricCryptoKey(32, 2); + const testStretchedMasterKey: SymmetricCryptoKey = makeSymmetricCryptoKey(64, 3); + const testMasterKeyEncryptedKey = + "0.gbauOANURUHqvhLTDnva1A==|nSW+fPumiuTaDB/s12+JO88uemV6rhwRSR+YR1ZzGr5j6Ei3/h+XEli2Unpz652NlZ9NTuRpHxeOqkYYJtp7J+lPMoclgteXuAzUu9kqlRc="; + const testStretchedMasterKeyEncryptedKey = + "2.gbauOANURUHqvhLTDnva1A==|nSW+fPumiuTaDB/s12+JO88uemV6rhwRSR+YR1ZzGr5j6Ei3/h+XEli2Unpz652NlZ9NTuRpHxeOqkYYJtp7J+lPMoclgteXuAzUu9kqlRc=|DeUFkhIwgkGdZA08bDnDqMMNmZk21D+H5g8IostPKAY="; + beforeEach(() => { stateProvider = mock(); stateService = mock(); @@ -45,6 +57,9 @@ describe("MasterPasswordService", () => { encryptService, logService, ); + + encryptService.unwrapSymmetricKey.mockResolvedValue(makeSymmetricCryptoKey(64, 1)); + keyGenerationService.stretchKey.mockResolvedValue(makeSymmetricCryptoKey(64, 3)); }); describe("setForceSetPasswordReason", () => { @@ -101,4 +116,41 @@ describe("MasterPasswordService", () => { expect(mockUserState.update).toHaveBeenCalled(); }); }); + describe("decryptUserKeyWithMasterKey", () => { + it("decrypts a userkey wrapped in AES256-CBC", async () => { + encryptService.unwrapSymmetricKey.mockResolvedValue(testUserKey); + await sut.decryptUserKeyWithMasterKey( + testMasterKey, + userId, + new EncString(testMasterKeyEncryptedKey), + ); + expect(encryptService.unwrapSymmetricKey).toHaveBeenCalledWith( + new EncString(testMasterKeyEncryptedKey), + testMasterKey, + ); + }); + it("decrypts a userkey wrapped in AES256-CBC-HMAC", async () => { + encryptService.unwrapSymmetricKey.mockResolvedValue(testUserKey); + keyGenerationService.stretchKey.mockResolvedValue(testStretchedMasterKey); + await sut.decryptUserKeyWithMasterKey( + testMasterKey, + userId, + new EncString(testStretchedMasterKeyEncryptedKey), + ); + expect(encryptService.unwrapSymmetricKey).toHaveBeenCalledWith( + new EncString(testStretchedMasterKeyEncryptedKey), + testStretchedMasterKey, + ); + expect(keyGenerationService.stretchKey).toHaveBeenCalledWith(testMasterKey); + }); + it("returns null if failed to decrypt", async () => { + encryptService.unwrapSymmetricKey.mockResolvedValue(null); + const result = await sut.decryptUserKeyWithMasterKey( + testMasterKey, + userId, + new EncString(testStretchedMasterKeyEncryptedKey), + ); + expect(result).toBeNull(); + }); + }); });